我正在尝试为同一条路线使用 GET
和 POST
:
我已经注册了以下内容:
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "MyGetMethod",
routeTemplate: "api/v1/users/{user}",
defaults: new
{
controller = "Users",
action = "MyGetMethod"
},
constraints: null,
handler: HttpClientFactory.CreatePipeline(
new HttpControllerDispatcher(config),
routeHandlerFactory.Create()));
config.Routes.MapHttpRoute(
name: "MySetMethod",
routeTemplate: "api/v1/users/{user}",
defaults: new
{
controller = "Users",
action = "MySetMethod"
},
constraints: null,
handler: HttpClientFactory.CreatePipeline(
new HttpControllerDispatcher(config),
routeHandlerFactory.Create()));
我的 UsersController.cs
包含:
[HttpPost]
public HttpResponseMessage MySetMethod(string user)
{
return new HttpResponseMessage(HttpStatusCode.NotImplemented);
}
[HttpGet]
public HttpResponseMessage MyGetMethod(string user)
{
return new HttpResponseMessage(HttpStatusCode.NotImplemented);
}
这行不通。
GET
工作正常,但是当我使用 POST
时,WebAPI 仍然重定向到 GET
方法,我得到错误:
"Message": "The requested resource does not support http method 'POST'."
如果我注释掉 GET
方法的注册,那么 POST
就可以正常工作。
是不是因为我在 Controller 方法上使用属性 [HttpPost]
、[HttpGet]
的组合,而不是将它们标记为 constraints
?
我怎样才能在同一条路线上有 GET
和 POST
?
最佳答案
如果你用这个就可以了
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
关于c# - WebAPI 路由 : Combining Attributes and HttpConfiguration settings,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38698528/