如何在WebApi+Odata项目中更改路由
本文关键字:路由 项目 WebApi+Odata | 更新日期: 2023-09-27 18:17:14
我正在重新实现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’。"}
您可以使用路由属性来实现这一点:
-
使用ODataRouteAttribute类:
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 } }
默认情况下,OData将搜索EDM模型中定义的annotation_shared_withController
。因为你的控制器被命名为AnnotationSharedWithController
,它将返回404
。
重命名你的控制器类可以解决这个问题。但是你最终会得到混乱的类名。
你可以实现你自己的路由约定,参见ASP中的路由约定。. NET Web API 2 Odata获取更多详细信息
希望能有所帮助。