asp.net – 抽象通用ODataController类导致“没有找到HTTP资源”
发布时间:2020-12-15 23:24:02 所属栏目:asp.Net 来源:网络整理
导读:我试图在VS 2013中抽象自动生成的ODataController类,因为除了POCO的名称之外,代码看起来是相同的,所以我做了以下操作: public abstract class ODataControllerBaseT,DB : ODataController where T : class,IIdentifiable,new() where DB : DbContext,new()
我试图在VS 2013中抽象自动生成的ODataController类,因为除了POCO的名称之外,代码看起来是相同的,所以我做了以下操作:
public abstract class ODataControllerBase<T,DB> : ODataController where T : class,IIdentifiable,new() where DB : DbContext,new() { protected DB _DataContext; public ODataControllerBase() : base() { _DataContext = new DB(); } // only one function shown for brevity [Queryable] public SingleResult<T> GetEntity([FromODataUri] int key) { return SingleResult.Create(_DataContext.Set<T>().Where(Entity => Entity.Id.Equals(key))); } } IIdentifiable是强制T参数具有可读/可写Id整数属性的接口. 实现看起来像这样(POCOs和DataContexts应该已经被创建) public class MyObjectsController : ODataControllerBase<MyObject,MyDbContext> { public MyObjectsController() : base() { } // That's it - done because all the repetitive code has been abstracted. } 现在,我的WebApiConfig的注册函数只包含以下内容: public static void Register(HttpConfiguration config) { ODataConventionModelBuilder builder = new ODataConventionModelBuilder(); builder.EntitySet<MyObject>("MyObjects"); config.Routes.MapODataRoute("odata","odata",builder.GetEdmModel()); } 我运行的项目,http:// localhost:10000 / odata / MyObjects我得到的响应: <m:error> <m:code/> <m:message xml:lang="en-US">No HTTP resource was found that matches the request URI `http://localhost:10000/odata/MyObjects.` </m:message> <m:innererror> <m:message>No routing convention was found to select an action for the OData path with template '~/entityset'. </m:message> <m:type/> <m:stacktrace/> </m:innererror> </m:error> 什么不见??了?我应该删除什么?这是我们不能做的事情,即我们真的需要直接继承ODataController,而不需要中间的父类? 解决方法
要确定要调用的操作,框架使用路由表. Web API的Visual Studio项目模板创建一个默认路由:
routes.MapHttpRoute( name: "API Default",routeTemplate: "api/{controller}/{id}",defaults: new { id = RouteParameter.Optional } ); 按行动名称路由 使用默认路由模板,Web API使用HTTP方法来选择操作.但是,您也可以创建URI中包含操作名称的路由: routes.MapHttpRoute( name: "ActionApi",routeTemplate: "api/{controller}/{action}/{id}",defaults: new { id = RouteParameter.Optional } ); 我配置配置如下: config.Routes.MapHttpRoute( name: "GetMessage",routeTemplate: "api/{controller}/{action}/{quoteName}",defaults: new { quoteName = RouterParameters.Optional } ); 访问您的URI,如下所示: http://localhost:42201/api/Extract/GetMessage/Q3 要么 http://localhost:42201/api/Extract/GetMessage/?quotename=Q3 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- asp.net-mvc-3 – 如何使用Asp.Net MVC 3和Razor具有视图特
- ASP.Net哪个用户帐户在IIS 7上运行Web服务?
- 【译】ASP.NET Core在 .NET Core 3.1 Preview 1中的更新
- asp.net – 如何使用多个项目部署单个解决方案?
- asp.net-mvc – 开始学习ASP.NET MVC专家级的最佳路线图
- 尝试使用asp.net流式传输PDF文件会产生“损坏的文件”
- asp.net – Server.Transfer vs. Context.RewritePath
- 实体框架 – MVC 3 EF 4.1 dbContext – 删除具有不可空的外
- asp.net-mvc – 如何asp.net(mvc)服务器返回错误jquery aja
- 为什么在ASP.Net中向StatusDescription添加换行符会关闭连接
推荐文章
站长推荐
- asp.net – Web.config:在xml属性中放一个注释
- asp.net – jqgrid第1页的x pager
- asp.net – 如何修复“System.Security.Permissi
- asp.net – 在单个位置禁用Windows身份验证
- 嵌套的ASP.NET’应用程序’在IIS内继承父配置值?
- asp.net-mvc – 从Html.ActionLink将参数传递给控
- 在ASP.NET中清除FileUpload内容
- asp.net – 跟踪广告链接点击但保持SEO友好链接?
- 安装ASP.NET Route Debugger后出现异常
- asp.net-mvc-4 – SimpleMembership – 向UserPr
热点阅读