我正在尝试设置一个使用OData 4的C#Web API。我创建了一个OdataController并相信我在WebApiConfig中正确路由它。我在控制器中的每个函数上放置一个调试器,以查看请求是否输入了方法。当我按下GET http://localhost:10013/odata/Call时,第一种方法中的调试器会命中,但是一旦我让调试器移动,请求就会失败。在Chrome中,我看到请求返回“406 Not Acceptable”,但预览或响应标签中没有任何内容。我究竟做错了什么?我可以看到请求正确进入控制器,但为什么它不返回字符串“call”以及发送406?
其次,如果我发送请求http://localhost:10013/odata/Call(0),控制器中的第一个方法将被命中而不是第二个(所需)或第三个方法。如果我想让它达到第二种或第三种方法,我在这里做错了什么?
我已经包含了我正在使用的控制器和WebApiConfig。
namespace JamesMadison
{
public static class Call
{
}
}
using System.Web.Http.OData;
namespace JamesMadison.Controllers
{
public class CallController : ODataController
{
public string GetCall()
{
return "call";
}
public string GetCall([FromODataUri] int id)
{
return "call";
}
public string GetCall([FromODataUri] string key)
{
return "call";
}
}
}
using System.Web.Http;
using System.Web.OData.Builder;
using System.Web.OData.Extensions;
namespace JamesMadison
{
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
config.MapODataServiceRoute("odata", "odata", model: GetModel());
}
public static Microsoft.OData.Edm.IEdmModel GetModel()
{
ODataModelBuilder builder = new ODataConventionModelBuilder();
builder.EntitySet<Call>("Call");
return builder.GetEdmModel();
}
}
}
答案 0 :(得分:0)
在控制器中,我有using System.Web.Http.OData;
并将其替换为using System.Web.OData;