使用 .NET 作为后端时,如何在 Azure 移动服务中定义自定义 api 路由?
How to define custom api routes in Azure Mobile Service when using .NET as Back end?
尝试了 Table Controller 和 Custom Controller,但无法定义两个接受相同参数和相同 http 方法的函数。例如当声明
public Person GetMemberDetails(int id)
{
// Some Code
return person;
}
public Person GetMemberAddress(int id)
{
// Some Code
return person;
}
因为这两个函数都使用 GET 请求,并且在构建项目后都具有相同的输入,所以我无法使用它们中的任何一个。当我删除一个或修改一个以使用我能够请求的任何其他请求方法时。
http://<azure-mobile-service-name>/Person/{id}
有没有办法声明两个具有相同签名和相同请求方法的函数?
根据 RESTful 原则,对于具有一个特定签名的动词,您只能使用一种方法。但是你总是可以修改你的路由并实现它,但你不会坚持使用 REST。在某些情况下,如果情况需要,这样做是可以的。
参考这个 post
需要使用Route属性,例如:
[Route("api/getdetails")]
public Person GetMemberDetails(int id)
{
// Some Code
return person;
}
[Route("api/getaddress")]
public Person GetMemberAddress(int id)
{
// Some Code
return person;
}
如果你想要路由中的id
或者搜索"attribute routing"
我花了几个小时试图在 Azure 应用服务中获取多个 post 方法(请注意应用服务取代了移动服务,参考:Upgrade your existing .NET Azure Mobile Service to App Service)。
通解可以参考前面提到的。但是,对于应用服务,有一条非常重要的评论。
在 Microsoft 官方示例(参考:Work with the .NET backend server SDK for Azure Mobile Apps)中,建议的默认配置为:
HttpConfiguration config = new HttpConfiguration();
new MobileAppConfiguration()
.UseDefaultConfiguration()
.ApplyTo(config);
不幸的是,UseDefaultConfiguration() 方法调用了 MapApiControllers(),它定义了标准路由 "api/{controller}/{id}",对 {id} 没有约束。这种路由与 "api/{controller}/{action}" 不兼容。所以,如果有人想使用多个 post 方法,标准配置应该替换为:
HttpConfiguration config = new HttpConfiguration();
new MobileAppConfiguration()
.AddTables(new MobileAppTableConfiguration().MapTableControllers().AddEntityFramework()).AddMobileAppHomeController().AddPushNotifications()
.ApplyTo(config);
config.Routes.MapHttpRoute("ActionApi", "api/{controller}/{action}");
当然可以使用 "api/{controller}/{action}/{id}" 路由,也可以使用可选的 {id}。
我希望我的调查可以为人们省去很多时间。如果来自 Microsoft 的人读到这篇文章 post - 请在默认示例中稍作评论,或者更好的是,向 UseDefaultConfiguration 添加一个参数来决定是否使用 "api/{controller}/{action}" 路由。
尝试了 Table Controller 和 Custom Controller,但无法定义两个接受相同参数和相同 http 方法的函数。例如当声明
public Person GetMemberDetails(int id)
{
// Some Code
return person;
}
public Person GetMemberAddress(int id)
{
// Some Code
return person;
}
因为这两个函数都使用 GET 请求,并且在构建项目后都具有相同的输入,所以我无法使用它们中的任何一个。当我删除一个或修改一个以使用我能够请求的任何其他请求方法时。
http://<azure-mobile-service-name>/Person/{id}
有没有办法声明两个具有相同签名和相同请求方法的函数?
根据 RESTful 原则,对于具有一个特定签名的动词,您只能使用一种方法。但是你总是可以修改你的路由并实现它,但你不会坚持使用 REST。在某些情况下,如果情况需要,这样做是可以的。 参考这个 post
需要使用Route属性,例如:
[Route("api/getdetails")]
public Person GetMemberDetails(int id)
{
// Some Code
return person;
}
[Route("api/getaddress")]
public Person GetMemberAddress(int id)
{
// Some Code
return person;
}
如果你想要路由中的id
或者搜索"attribute routing"我花了几个小时试图在 Azure 应用服务中获取多个 post 方法(请注意应用服务取代了移动服务,参考:Upgrade your existing .NET Azure Mobile Service to App Service)。
通解可以参考前面提到的。但是,对于应用服务,有一条非常重要的评论。 在 Microsoft 官方示例(参考:Work with the .NET backend server SDK for Azure Mobile Apps)中,建议的默认配置为:
HttpConfiguration config = new HttpConfiguration();
new MobileAppConfiguration()
.UseDefaultConfiguration()
.ApplyTo(config);
不幸的是,UseDefaultConfiguration() 方法调用了 MapApiControllers(),它定义了标准路由 "api/{controller}/{id}",对 {id} 没有约束。这种路由与 "api/{controller}/{action}" 不兼容。所以,如果有人想使用多个 post 方法,标准配置应该替换为:
HttpConfiguration config = new HttpConfiguration();
new MobileAppConfiguration()
.AddTables(new MobileAppTableConfiguration().MapTableControllers().AddEntityFramework()).AddMobileAppHomeController().AddPushNotifications()
.ApplyTo(config);
config.Routes.MapHttpRoute("ActionApi", "api/{controller}/{action}");
当然可以使用 "api/{controller}/{action}/{id}" 路由,也可以使用可选的 {id}。
我希望我的调查可以为人们省去很多时间。如果来自 Microsoft 的人读到这篇文章 post - 请在默认示例中稍作评论,或者更好的是,向 UseDefaultConfiguration 添加一个参数来决定是否使用 "api/{controller}/{action}" 路由。