【发布时间】:2016-09-24 05:23:54
【问题描述】:
我在自定义区域中有一个 ASP.NET Web API 2 控制器。 (我在默认路由中也有一些 API 控制器)
我已经注册了路线:
// Web API routes
config.MapHttpAttributeRoutes();
// NEW ROUTE FOR AREAS
config.Routes.MapHttpRoute(
name: "API Area MyArea",
routeTemplate: "api/MyArea/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional });
我的控制器和方法:
[RoutePrefix("myarea/api/accountapi")]
public class AccountAPIController : ApiController
{
...
[System.Web.Http.HttpGet]
[AcceptVerbs("GET")]
[AllowAnonymous]
[Route("emailexists")]
public async Task<IHttpActionResult> EmailExsists([FromUri]string email)
{
var user = await UserManager.FindByEmailAsync(email).ConfigureAwait(false);
return Ok(user != null);
}
...
}
但无论我尝试什么,我都无法让它工作: https://localhost:44300/api/accountapi/emailexists?email=info@something.com
{"message":"请求的资源不支持http方式 '得到'。"}
事实上,我无法让它返回预期的 404。例如,这个: https://localhost:44300/api/accountapi/jibberish
也返回 405。
默认路由中的我的 API 控制器按预期工作,即在应该返回 404 时返回。
有什么想法吗?
【问题讨论】:
-
能否请您显示调用此 API 的代码?这很可能是因为您使用
type: "POST"进行 API 调用。 -
不,对不起,我不是。我明确地从我的客户那里做 GET。
-
您为您的区域添加常规路线和属性路线是否有原因?无论如何,您指定的常规路由 (api/MyArea/{controller}/{id}) 与控制器上的属性路由 (myarea/api/accountapi) 之间存在不匹配(区域和 api 段已切换) )。我认为属性路由会覆盖任何常规路由,因此您需要在当前配置中使用的 url 是 GET https://localhost:44300/myarea/api/accountapi/emailexists?email=a@email.com
标签: asp.net-web-api asp.net-mvc-areas http-status-code-405