asp.net – 抽象通用ODataController类导致“没有找到HTTP资源”
发布时间:2020-05-24 02:44:56 所属栏目:asp.Net 来源:互联网
导读:我试图在VS 2013中抽象自动生成的ODataController类,因为除了POCO的名称之外,代码看起来是相同的,所以我做了以下操作: public abstract class ODataControllerBaseT,DB : ODataController where T : class, IIdentifiable, new() where DB
|
我试图在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 (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- .net – 单个配置密钥的多个值
- asp.net – 在IIS中,existingResponse =“PassThrough”是什
- asp.net-core – EntityFramework核心数据库首先接近多个表
- asp.net-core – ASP.NET Core 1.0 SynchronizationContext
- asp.net-mvc – 让System.Web.Optimization在类库中的剃刀视
- 61条面向对象设计的经验原则 转载
- asp.net单选按钮分组
- asp.net-mvc – 使用JWT实现的最小WebAPI2 OAuth:401始终返
- asp.net-core – 重新挑战ASP.NET Core中经过身份验证的用户
- asp.net-mvc – 如何根据接受的HTTP动词重载ASP.NET MVC操作
推荐文章
站长推荐
- asp.net-mvc – 如何获得html.ActionLink结果文本
- asp.net-mvc – CloudFlare SSL与ASP.NET MVC Re
- asp.net-mvc – 如何根据接受的HTTP动词重载ASP.
- asp.net-mvc-4 – 在Startup.Auth.cs之外配置的C
- asp.net – 在Global.asax方法中将与Autofac注册
- 如何设置asp.net下拉列表的样式
- asp-classic – 是代码页65001和utf-8同样的东西
- ASP.NET中的自定义元素与自定义子元素
- asp.net-mvc – 填写下拉列表中选择另一个下拉列
- .net – 我应该在HttpCookie.Expires和HttpCache
热点阅读
