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

时间:2017-06-15 15:14:36

标签: c# asp.net-web-api .net-core asp.net-web-api-routing

这是我的控制器 - 使用webApi框架4.6.1。它正确注册,但是当我从.net core1.1应用程序发送ajax请求时,我在get和post方法上都出现了404错误。

  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 个答案:

答案 0 :(得分:0)

我发现有一些物品需要更多挖掘。

  1. 这是一个CORS问题。一旦我添加:    var enableCorsAttribute = new EnableCorsAttribute(“*”,                                            “起源,内容类型,接受”,                                            “GET,PUT,POST,DELETE,OPTIONS”);   config.EnableCors(enableCorsAttribute);

    到WebApiConfig,我能够使用我的测试获取功能来测试它是否已到达服务器。此外,我在服务器端未正确配置有关ajax调用的数据。

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

    感谢每一个人的帮助。