我正在尝试为同一路线设置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
方法,我收到错误:
“消息”:“请求的资源不支持http方法 'POST'。“
如果我注释掉GET
方法的注册,则POST
可以正常工作。
是因为我在Controller方法中使用属性[HttpPost]
,[HttpGet]
而不是将它们标记为constraints
?
如何在同一条路线上拥有GET
和POST
?
答案 0 :(得分:0)
如果你使用它将起作用
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
答案 1 :(得分:0)
您只需为此定义一个 HttpRoute
,请尝试以下操作:
config.Routes.MapHttpRoute(
name: "UserController",
routeTemplate: "api/v1/users/{user}",
defaults: new { user= RouteParameter.Optional }
handler: HttpClientFactory.CreatePipeline(
new HttpControllerDispatcher(config),
routeHandlerFactory.Create()));
如果仍然无效,请尝试使用相同的代码,但请将routeTemplate
更改为:
routeTemplate: "api/v1/{controller}/{user}"
使用帖子
调用Web方法https://YourServer/YourVirtualDirectory/api/v1/Users/myUser