【发布时间】:2014-10-21 07:15:18
【问题描述】:
当我升级到 Odata v4 时,现在在 v3 中工作的所有操作都会出现 404 not found 错误:
[HttpException]: The controller for path /odata/MyModel/CheckStatus was not found or does not implement IController.
at System.Web.Mvc.DefaultControllerFactory.GetControllerInstance(RequestContext requestContext, Type controllerType)
at System.Web.Mvc.DefaultControllerFactory.CreateController(RequestContext requestContext, String controllerName)
at System.Web.Mvc.MvcHandler.ProcessRequestInit(HttpContextBase httpContext, IController& controller, IControllerFactory& factory)
at System.Web.Mvc.MvcHandler.BeginProcessRequest(HttpContextBase httpContext, AsyncCallback callback, Object state)
at System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()
at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)
我的代码如下:
WebApiConfig:
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{action}/{id}",
defaults: new { id = RouteParameter.Optional }
);
...
config.MapODataServiceRoute(
routeName: "OData",
routePrefix: "odata",
model: GetModel(),
batchHandler: new DefaultODataBatchHandler(GlobalConfiguration.DefaultServer));
config.AddODataQueryFilter();
获取模型:
builder.EntityType<MyModel>().Collection.
Action("CheckStatus").Parameter<IEnumerable<EntityStatus<MyModel>>>("modelStatus");
...
ODataController:
public async Task<IHttpActionResult> CheckStatus([FromBody] IEnumerable<EntityStatus<MyModel>> modelStatus)
...
其中 EntityStatus 是一个通用类,如下所示:
public class EntityStatus<T> where T : class
{
[Key, Column(Order = 0)]
public string Status { get; set; }
[Key, Column(Order = 1)]
public string Original { get; set; }
public T Model { get; set; }
}
在 Ajax 调用中:
var url = "/odata/MyModel/CheckStatus";
$.ajax({
url: url,
...
我尝试添加命名空间,修改 web.config 并使用OdataRoute,但均未成功。你能帮我绕过上面显示的这些错误吗?
【问题讨论】:
标签: asp.net-mvc asp.net-mvc-4 odata asp.net-web-api2