在C#WebApi上找不到404
我有一个从在C#WebApi上找不到404,c#,asp.net,asp.net-web-api2,C#,Asp.net,Asp.net Web Api2,我有一个从ApiController继承的类,它的一些方法被正确调用,另一些方法被未找到。我不知道为什么。我已经找了几个小时的解决方案了,但还是没有找到。请注意,我是新手,这是我在C#中的第一个WebApi 路由:(WebApiConfig.cs) 控制器: public class ExchangeController : ApiController { public HttpResponseMessage GetMailHeader(int id) { Con
ApiController
继承的类,它的一些方法被正确调用,另一些方法被未找到
。我不知道为什么。我已经找了几个小时的解决方案了,但还是没有找到。请注意,我是新手,这是我在C#中的第一个WebApi
路由:(WebApiConfig.cs)
控制器:
public class ExchangeController : ApiController
{
public HttpResponseMessage GetMailHeader(int id)
{
Console.WriteLine(id);
HttpResponseMessage response = new HttpResponseMessage();
response.Content = new StringContent("ok");
return response;
}
public HttpResponseMessage GetTest()
{
HttpResponseMessage response = new HttpResponseMessage();
response.Content = new StringContent("working !!");
return response;
}
}
JS:
getTest
方法返回200ok
,而getMailHeader
返回404notfound
。我遗漏了什么?据我所知,数据添加了一个查询字符串,而不是url本身的一部分。您将id定义为url的一部分,因此正确的url是/api/exchange/getmailheader/42。
您还可以将id移出routeTemplate。因为您的方法以“Get”开头,并且没有特定属性,所以框架假定它是一个
HttpGet
(请参见下面的规则2),这要求id
是url的一部分(基于默认路由)
如果您希望它是一个HttpPost
(您可以像现在一样在主体中传递一个json对象),那么在方法上方添加一个[HttpPost]
属性,或者删除操作名称的“Get”部分
HTTP方法。该框架只选择与目标匹配的操作
请求的HTTP方法,确定如下:
感谢大家的评论和回答,这让我找到了解决方案 我错过了编写我的
ajax
请求。我没有从控制台console.log
获得任何打印数据,正如@Ahmedilyas所说,数据
属性写得很糟糕
以下工作:
$.ajax({
type: "GET",
url: "/api/exchange/getTest"
})
.done(function (data) {
console.log(data);
});
$.ajax({
type: "GET",
url: "/api/exchange/getMailHeader",
data: { id: 42 }
})
.done(function (data) {
console.log(data);
});
这是一个很小的步骤,但我发现自己在其中遇到了麻烦:重新构建所有解决方案,然后再次部署。getMailHeader的数据不正确。您应该这样做:data:{id:42}(将其作为JSON传递)@Ahmedilyas这实际上是问题的一部分,它引导我找到了解决方案!;)我保留了路由的
{id}
,因为在执行GET
方法时,我不知道如何以任何其他方式向url发送额外数据。不过,如果我可以从ajaxdata
属性发送所需的所有数据,我可能会删除它。
$.ajax({
type: "GET",
url: "/api/exchange/getTest",
done: function (data) {
console.log(data);
}
});
$.ajax({
type: "GET",
url: "/api/exchange/getMailHeader",
data: "42",
done: function (data) {
console.log(data);
}
});
$.ajax({
type: "GET",
url: "/api/exchange/getTest"
})
.done(function (data) {
console.log(data);
});
$.ajax({
type: "GET",
url: "/api/exchange/getMailHeader",
data: { id: 42 }
})
.done(function (data) {
console.log(data);
});