这是我的控制器 - 使用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");
}
});
}
我检查了控制器上的路由和属性,看起来它们是正确的。提前谢谢。
答案 0 :(得分:0)
我发现有一些物品需要更多挖掘。
这是一个CORS问题。一旦我添加: var enableCorsAttribute = new EnableCorsAttribute(“*”, “起源,内容类型,接受”, “GET,PUT,POST,DELETE,OPTIONS”); config.EnableCors(enableCorsAttribute);
到WebApiConfig,我能够使用我的测试获取功能来测试它是否已到达服务器。此外,我在服务器端未正确配置有关ajax调用的数据。
最后,WebApi的网址不正确。我需要为整个URL提供端口号。
感谢每一个人的帮助。