Web API 2 not working (404)

本文关键字:working not API Web | 更新日期: 2023-09-27 18:14:41

我已经尝试了很长一段时间得到Web API 2工作。我在网上读了很多文章和帖子,但到目前为止,我一直很不走运。

我只需要得到工作简单的Web API方法,但出于某种原因,我仍然得到404方法没有找到。我现在真的不知道问题出在哪里,因为在我看来一切都很好。

我已经尝试了很多属性,配置等的变化。我已经结束了这段代码:

Global.asax

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

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);

ApiController

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

模型:

public class ContactFormModel
{
    public string Name { get; set; }
    public string Email { get; set; }
    public string Subject { get; set; }
    public string Message { get; set; }
}

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,
    ...
});

正如你所看到的,它是MVC 5 + Web API 2。

谢谢你的帮助。这么简单的东西,什么都没起作用

Web API 2 not working (404)

请更新您的全局。例如:

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

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

对于我来说,路由属性不能与WebAPI一起工作,因为我在web.config中安装了URL重写模块。不知何故,全局路由模板在适当的位置工作,而不是每个web方法上面的路由属性。我从网络的<system.webServer>部分内删除了<rewrite>部分。配置和路由属性开始工作

在我的例子中,我有一个Web API 2项目,该项目发布在域名的子文件夹中,该子文件夹托管了自己的ASP.net项目。网络。主应用程序的配置被继承到web中。Web API 2项目的配置,这干扰了路由。为了解决这个问题,我停止了上网。在主项目中完全配置继承。

  <location path="." inheritInChildApplications="false"> 
    <system.web> 
    … 
    </system.web> 
  </location>