Web API 2无法正常工作(404)

Dan*_*iel 14 c# asp.net-web-api asp.net-web-api-routing

我已经尝试了很长一段时间让Web API 2正常工作.我已经通过互联网阅读了很多文章和帖子,但到目前为止我还不走运.

我只需要使用简单的Web API方法,但由于某种原因,我仍然没有找到404方法.我现在真的不知道,问题可能在我看来一切都好.

我尝试了很多属性,配置等等.我最终得到了这段代码:

Global.asax中

AreaRegistration.RegisterAllAreas();
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);

GlobalConfiguration.Configure(WebApiConfig.Register);
Run Code Online (Sandbox Code Playgroud)

WebApiConfig.cs

config.MapHttpAttributeRoutes();

config.Routes.MapHttpRoute(
    name: "DefaultApi",
    routeTemplate: "api/{controller}/{id}",
    defaults: new {  id = RouteParameter.Optional }
);

var appXmlType = config.Formatters.XmlFormatter.SupportedMediaTypes.FirstOrDefault(x => x.MediaType == "application/xml");
config.Formatters.XmlFormatter.SupportedMediaTypes.Remove(appXmlType);
Run Code Online (Sandbox Code Playgroud)

ApiController

public class ContactFormController : ApiController
{
    [Route("~/api/sendemail")]
    [HttpPost()]
    public IHttpActionResult SendEmail(ContactFormModel contactForm)
    {
        return Ok();
    }
}
Run Code Online (Sandbox Code Playgroud)

模型:

public class ContactFormModel
{
    public string Name { get; set; }
    public string Email { get; set; }
    public string Subject { get; set; }
    public string Message { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

jQuery代码

var jsonData = { "Name": name.val(), "Email": email.val(), "Subject": subject.val(), "Message": comment.val() };

$.ajax({
    url: "api/sendemail",
    type: "POST",
    data: jsonData,
    cache: false,

    ...
});
Run Code Online (Sandbox Code Playgroud)

如您所见,它是MVC 5 + Web API 2.

感谢帮助.这么简单,没有任何工作.

syl*_*ter 25

请像这里更新你的global.asax:

protected void Application_Start()
{
    AreaRegistration.RegisterAllAreas();
    GlobalConfiguration.Configure(WebApiConfig.Register);
    FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
    RouteConfig.RegisterRoutes(RouteTable.Routes);

}
Run Code Online (Sandbox Code Playgroud)

[Route("~/api/sendemail")]改为[Route("/api/sendemail")]

  • Api路由必须首先进行评估,或者您需要创建更严格的mvc路由(这样框架不会尝试查找'ApiController'.)这不是特定于MVC5的行为 (3认同)
  • 我想补充一点,我在404问题的早上失去了一半,所有答案似乎都不适合我,因为我有所有需要的组件.在我的情况下,我在webapi路线之前注册了正常路线,这似乎覆盖了api路线并且无法识别它们,所以在切换后它最终起作用. (2认同)