gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 19:09:35 26 4
gpt4 key购买 nike

我正在创建我的第一个 ASP.NET Web API。我正在尝试遵循标准的 REST URL。我的 API 会返回搜索结果记录。我的网址应该是——
../api/categories/{categoryId}/subcategories/{subCategoryId}/records?SearchCriteria
我计划使用 oData 通过 IIS 进行搜索和基本/摘要式身份验证。我的问题出在嵌套资源中。在我返回搜索结果之前,我需要检查用户是否可以访问该类别和子类别。
现在我创建了我的 Visual Studio 2012 – MVC4/Web API 项目开始。在 App_Start 文件夹中,我认为有 2 个文件与 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 以及这 2 个文件需要进行哪些更改提出建议。或者,我在这里缺少一些其他配置吗?提前致谢。

最佳答案

Asp.net Web API 2 提供开箱即用的属性路由。您可以定义Route在个人行动方法或全局层面。

例如:

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

您还可以使用 [RoutePrefix] 为整个 Controller 设置一个公共(public)前缀。属性:
[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 中属性路由的更多信息的链接。

关于asp.net - URL 中的 Web API 嵌套资源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16513780/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com