我已经查看了许多类似的问题,但找不到适合我的解决方案.所以对Get的调用工作正常,但调用POST返回404.我创建了一个简单的WebAPI项目(MVC 4).
public class CasesController : ApiController { [Inject] public ICaseManager CaseManager { get; set; } // GET api/cases public IEnumerableGet() { return CaseManager.ListCases(); } // POST api/cases [HttpPost] public void Post([FromBody]Case objCase) { } }
因此,当我导航到http://localhost:34645/api/cases
我时,我得到以下内容:
[{"CaseID":1,"CaseCode":"one","CaseDescription":"case one"},{"CaseID":2,"CaseCode":"two","CaseDescription":"case two"}]
我创建了另一个项目(ASP.Net)并在其中包含一个html文件,其中包含以下代码:
每次我单击调用postData的按钮时,我都会收到警告"错误404".
这是我的路线:
Global.asax中:
protected void Application_Start() { AreaRegistration.RegisterAllAreas(); WebApiConfig.Register(GlobalConfiguration.Configuration); FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters); RouteConfig.RegisterRoutes(RouteTable.Routes); BundleConfig.RegisterBundles(BundleTable.Bundles); }
WebAPIConfig.Register:
public static class WebApiConfig { public static void Register(HttpConfiguration config) { config.Routes.MapHttpRoute( name: "DefaultApi", routeTemplate: "api/{controller}/{id}", defaults: new { id = RouteParameter.Optional } ); //RA: to get JSON var appXmlType = config.Formatters.XmlFormatter.SupportedMediaTypes.FirstOrDefault(t => t.MediaType == "application/xml"); config.Formatters.XmlFormatter.SupportedMediaTypes.Remove(appXmlType); } }
RouteConfig:
public class RouteConfig { public static void RegisterRoutes(RouteCollection routes) { routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); routes.MapRoute( name: "Default", url: "{controller}/{action}/{id}", defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } ); } }
请指教.
注意WebApi注册行的顺序.我发现当我按照这个顺序专门使用Global.asax.cs代码时它起作用了:
AreaRegistration.RegisterAllAreas(); GlobalConfiguration.Configure(WebApiConfig.Register); FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters); RouteConfig.RegisterRoutes(RouteTable.Routes); BundleConfig.RegisterBundles(BundleTable.Bundles);
否则,它失败并出现404错误.