我正在重新实现WCF服务,我选择使用WebAPI 2.2 + OData v4。 我面临的问题是我需要包含'_'的路由,而我无法实现它。 目前我有这个:
public class AnnotationSharedWithController : ODataController
{
...
[EnableQuery]
public IQueryable<AnnotationSharedWith> Get()
{
return _unitOfWork.AnnotationSharedWith.Get();
}
...
}
我的WebApiConfig.cs看起来像这样:
public static void Register(HttpConfiguration config)
{
config.MapODataServiceRoute("webservice",null,GenerateEdmModel());
config.Count();
}
private static IEdmModel GenerateEdmModel()
{
var builder = new ODataConventionModelBuilder();
builder.EntitySet<AnnotationSharedWith>("annotation_shared_with");
return builder.GetEdmModel();
}
当我发出GET请求时,我收到以下错误
{“Message”:“找不到与请求URI匹配的HTTP资源 'http://localhost:12854/annotation_shared_with'。“,”MessageDetail“: “没有找到与命名控制器匹配的类型 'annotation_shared_with'。“}
答案 0 :(得分:0)
默认情况下,OData将搜索您的EDM模型中定义的annotation_shared_withController
。由于您的控制器名为AnnotationSharedWithController
,因此将返回404
。
重新编写控制器类将解决此问题。但是你最终会得到凌乱的类名。
您可以实现自己的路由约定,请参阅 Routing Conventions in ASP.NET Web API 2 Odata了解更多详情
希望它有所帮助。
答案 1 :(得分:0)
您可以使用路由属性来实现此目的:
public class AnnotationSharedWithController : ODataController
{
[EnableQuery]
[ODataRouteAttribute("annotation_shared_with")]
public IQueryable<AnnotationSharedWith> Get()
{
//your code
}
}
使用ODataRoutePrefixAttribute和ODataRouteAttribute类:
[ODataRoutePrefixAttribute("annotation_shared_with")]
public class AnnotationSharedWithController : ODataController
{
[EnableQuery]
[ODataRouteAttribute("")]
public IQueryable<AnnotationSharedWith> Get()
{
//your code
}
}