从.net核心应用程序调用时找不到web api路径

问题描述:

这是我的控制器 - 使用webApi框架4.6.1。它正确注册,但是当我从我的.net core1.1应用程序发送ajax请求时,我在get和post方法上都得到了404错误。从.net核心应用程序调用时找不到web api路径

public static class WebApiConfig 
    { 
     public static void Register(HttpConfiguration config) 
     { 
     // Web API configuration and services 

     // Web API routes 
      config.MapHttpAttributeRoutes(); 

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


public class MainController : ApiController 
{ 

     /// <summary> 
     /// ExistingItems - keep a list of all items that are currently in 
     the list and were not processed, for auditing. 
     /// </summary> 
     public List<XMLData.Struct> ExistingItems = new List<XMLData.Struct> 
     (); 

     [Route("api/Main/GetMyList")] 
     [ActionName("GetMyList")] 
     [System.Web.Http.HttpGet] 
     public HttpResponseMessage GetMyList() 
     { 
      HttpResponseMessage resp = new HttpResponseMessage(); 
      resp.StatusCode = HttpStatusCode.OK; 
      return resp; 
     } 

     /// <summary> 
     /// PostXMLFile - process the xml file on the server. 
     /// </summary> 
     /// <param name="value"></param> 
     [Route("api/Main/SaveXML/")] 
     [ActionName("SaveXml")] 
     [System.Web.Http.HttpPost] 
     public HttpResponseMessage SaveXml(string value) 
     { 
      List<XMLData.Struct> pageElements = ConvertToList(value); 


      var url = "/resource/BigBearNew.xml"; 
      var path = System.Web.Hosting.HostingEnvironment.MapPath(url); 
      XmlDocument xDoc = new XmlDocument(); 
      xDoc.Load(path); 
      foreach (var pge in pageElements) 
      { 
       if (!ElementExists(xDoc, pge)) 
       { 
        AddAsNew(xDoc, pge); 
       }; 
      } 

     HttpResponseMessage resp = new HttpResponseMessage(); 
     resp.StatusCode = HttpStatusCode.OK; 
     return resp; // OK = 200 

    } 

这里是.net core1.1调用。我有.net核心项目中引用的WebApi项目。

function saveElementList() 
{ 
$.ajax({ 
    url: 'api/Main/SaveXml', 
    type: 'POST', 
    dataType: 'json', 
    contentType: 'application/json; charset=utf-8', 
    data: JSON.stringify(elementNodes), 
    success: function (data) { 
     alert("Saved successfully"); 
    } 
}); 
} 

function getList() { 
$.ajax({ 
    url: 'api/Main/GetMyList', 
    type: 'GET', 
    dataType: 'json', 
    contentType: 'application/json; charset=utf-8', 
    // data: JSON.stringify(elementNodes), 
    success: function (data) { 
     alert("got list successfully"); 
    } 
}); 
} 

我检查了控制器上的路由和属性,看起来他们是正确的。提前致谢。

+1

我看不到.NET Core在哪里适合这个。我在.NET Framework上看到一个Web API 2应用程序,并且看到一些AJAX调用。 – mason

+0

你能从浏览器中找到终点吗? – InitLipton

+0

您是否在webapi和core之间使用相同的端口(默认值为5000)? –

我发现有几个项目挖掘更多。

  1. 这是一个CORS问题。一旦我加入: var enableCorsAttribute = new EnableCorsAttribute(“*”, “Origin,Content-Type,Accept”, “GET,PUT,POST,DELETE,OPTIONS”); config.EnableCors(enableCorsAttribute);

    到WebApiConfig,我能够使用我的测试get函数来测试它到达服务器。另外我的ajax调用数据在服务器端没有正确配置。

最后,WebApi的URL不正确。我需要提供整个网址与端口号。

感谢您的帮助。

+0

也是如此。正如石匠所言,这与dotnetcore无关。 –