我正试图为同一条路线拥有一个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":“请求的资源不支持http方法‘POST’。”
如果我注释掉了GET方法的注册,那么POST就能正常工作。
是不是因为我在Controller方法上使用属性[HttpPost]、[HttpGet]之间的组合,而不是将它们标记为constraints?
我怎么能在同一条路线上有一个GET和POST?
发布于 2016-08-01 12:18:45
如果你用这个就行了
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);发布于 2016-08-01 12:39:08
您只需为此定义one 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}"并使用post调用web方法
https://YourServer/YourVirtualDirectory/api/v1/Users/myUserhttps://stackoverflow.com/questions/38698528
复制相似问题