加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net – URL中的Web API嵌套资源

发布时间:2020-12-16 07:00:39 所属栏目:asp.Net 来源:网络整理
导读:我正在创建我的第一个ASP.NET Web API.我试图遵循标准的REST URL.我的API会返回搜索结果记录.我的网址应该是 – ../api/categories/{categoryId}/subcategories/{subCategoryId}/records?SearchCriteria 我打算使用oData进行搜索和IIS上的基本/摘要式身份验
我正在创建我的第一个ASP.NET Web API.我试图遵循标准的REST URL.我的API会返回搜索结果记录.我的网址应该是 –

../api/categories/{categoryId}/subcategories/{subCategoryId}/records?SearchCriteria

我打算使用oData进行搜索和IIS上的基本/摘要式身份验证.我的问题在于嵌套资源.在我返回搜索结果之前,我需要检查用户是否可以访问此类别和子类别.
现在我开始创建我的Visual Studio 2012 – MVC4 / Web API项目.在App_Start文件夹中,我认为有两个文件是URL和资源相关的顺序.

1.RouteConfig.cs

routes.MapRoute(
name: "Default",url: "{controller}/{action}/{id}",defaults: new { controller = "Home",action = "Index",id = UrlParameter.Optional }
);

2.WebApiConfig.cs

config.Routes.MapHttpRoute(
name: "DefaultApi",routeTemplate: "api/{controller}/{id}",defaults: new { id = RouteParameter.Optional }
);

使用此模型,如果我的URL是../api/records?SearchCriteria,它可以正常工作,但它不是我上面提到的URL设计.我知道我必须做更多的阅读,但到目前为止还没有找到正确的文章.需要您的建议如何实现我的URL以及这两个文件需要进行哪些更改.或者,我在这里缺少一些其他配置吗?提前致谢.

解决方法

Asp.net Web API 2提供开箱即用的属性路由.您可以在单个操作方法或全局级别定义Route.

例如:

[Route("customers/{customerId}/orders/{orderId}")]
public Order GetOrderByCustomer(int customerId,int orderId) { ... }

您还可以使用[RoutePrefix]属性为整个控制器设置公共前缀:

[RoutePrefix("api/books")]
public class BooksController : ApiController
{
    // GET api/books
    [Route("")]
    public IEnumerable<Book> Get() { ... }

    // GET api/books/5
    [Route("{id:int}")]
    public Book Get(int id) { ... }
}

您可以访问this链接以获取有关Web API 2中的属性路由的更多信息.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读