【发布时间】:2018-08-23 12:37:12
【问题描述】:
我有一个简单的 Web API,它在一个路由上注册。目前我有两个,因为其中只有一个可以满足我的需要。
我的应用程序只有一个控制器和该控制器中的一个 Post 方法。我已经注册了一个总是返回 405 (method not allowed)
两条路由在RouteConfig.cs中配置:
routes.MapHttpRoute(
name: "app-events",
routeTemplate: "events",
defaults: new { controller = "Events" },
handler: new GZipToJsonHandler(GlobalConfiguration.Configuration),
constraints: null
);
routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
Controller方法本质上是这样的……
public class EventsController : ApiController
{
public EventsController()
{
_sender = new EventHubSender();
}
public async Task<HttpResponseMessage> Post(HttpRequestMessage requestMessage)
{
// doing fun stuff here…
return new HttpResponseMessage(HttpStatusCode.OK);
}
}
如果我只配置第一个路由并将请求发布到 http://devbox/events,我将得到 405。但是,如果我添加第二个默认路由并发布到 @ 987654325@ 我得到了预期的201。
两个路由同时配置,模式相同,显式绑定到控制器的路由收到一个发布请求并失败并返回 405,但另一个 URL 可以工作。
在承认提出这个问题之前,我花了很长时间环顾四周。我读到的大多数东西都与 Webdav 有很大关系,我想我已经按照它们中的每一个来解决这个问题。我对这个堆栈不是很有经验,所以对我来说没有什么是很明显的。
【问题讨论】:
标签: c# asp.net-web-api asp.net-web-api-routing