如何通过配置ASP.NET MVC 4 WebAPI将特定控制器映射到长尾路由?

2026-03-30 12:291阅读0评论SEO资讯
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计499个文字,预计阅读时间需要2分钟。

如何通过配置ASP.NET MVC 4 WebAPI将特定控制器映射到长尾路由?

我一直在学习使用MVC和WebAPI,感觉非常有趣。但我在努力解决一些路线问题。举个例子,我有一个webAPI项目,结构如下所示:

项目:控制器:- CustomerController.cs- CustomerAddressController.cs- 产品

我一直在尝试使用MVC WebAPI,非常酷的东西.但我正在努力解决路线问题.

作为一个例子,我有一个webAPI项目结构,如下所示:

如何通过配置ASP.NET MVC 4 WebAPI将特定控制器映射到长尾路由?

项目:

>控制器

>客户

> CustomerController.cs
> CustomerAddressController.cs

>产品

> ProductCategoriesController.cs
>产品控制器

目前我在WebApiConfig.cs中定义了一个API路由

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

当我只有客户相关的控制器时,这很好用.
所以我可以打电话:

> GET api / customer / CustomerAddress /?customerID = 1234

但是现在我已经添加了与配置相关的产品相关控制器(当然)以获得我必须调用Uri的产品:

> GET api / customer / products /?prodID = 5678 *但我不想要这个Uri

相反,我想:

> GET api / products /?prodID = 5678

对于产品类别,我想要类似于:

> GET api / products / categories /?catID = 1357

我认为我必须做的就是添加更多路线,但是我无法找到如何将各种控制器与我希望的路线联系起来?

如果我确实添加了另一条路线,我最终会将两条不同的uri路由到我建立的每个控制器.

如何实现我想要的逻辑分区?

使用Web Api 2,您可以顺利地为您的操作定义特定路由.例如 :

public class CustomerController : ApiController { [Route("api/customer")] public IEnumerable<Customer> GetCustomers() { // .. } [Route("api/customer/{customerID}")] public Customer GetCustomer(int customerID) { // .. } [Route("api/customer/CustomerAddresses/{customerID}")] public Address GetCustomerAddresses(int customerID) { // ... } } public class ProductController : ApiController { [Route("api/product")] public IEnumerable<Product> GetProducts() { // .. } [Route("api/product/{prodID}")] public Product GetProduct(int prodID) { // .. } [Route("api/product/categories/{catID}")] public Category GetCategory(int catID) { // ... } }

本文共计499个文字,预计阅读时间需要2分钟。

如何通过配置ASP.NET MVC 4 WebAPI将特定控制器映射到长尾路由?

我一直在学习使用MVC和WebAPI,感觉非常有趣。但我在努力解决一些路线问题。举个例子,我有一个webAPI项目,结构如下所示:

项目:控制器:- CustomerController.cs- CustomerAddressController.cs- 产品

我一直在尝试使用MVC WebAPI,非常酷的东西.但我正在努力解决路线问题.

作为一个例子,我有一个webAPI项目结构,如下所示:

如何通过配置ASP.NET MVC 4 WebAPI将特定控制器映射到长尾路由?

项目:

>控制器

>客户

> CustomerController.cs
> CustomerAddressController.cs

>产品

> ProductCategoriesController.cs
>产品控制器

目前我在WebApiConfig.cs中定义了一个API路由

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

当我只有客户相关的控制器时,这很好用.
所以我可以打电话:

> GET api / customer / CustomerAddress /?customerID = 1234

但是现在我已经添加了与配置相关的产品相关控制器(当然)以获得我必须调用Uri的产品:

> GET api / customer / products /?prodID = 5678 *但我不想要这个Uri

相反,我想:

> GET api / products /?prodID = 5678

对于产品类别,我想要类似于:

> GET api / products / categories /?catID = 1357

我认为我必须做的就是添加更多路线,但是我无法找到如何将各种控制器与我希望的路线联系起来?

如果我确实添加了另一条路线,我最终会将两条不同的uri路由到我建立的每个控制器.

如何实现我想要的逻辑分区?

使用Web Api 2,您可以顺利地为您的操作定义特定路由.例如 :

public class CustomerController : ApiController { [Route("api/customer")] public IEnumerable<Customer> GetCustomers() { // .. } [Route("api/customer/{customerID}")] public Customer GetCustomer(int customerID) { // .. } [Route("api/customer/CustomerAddresses/{customerID}")] public Address GetCustomerAddresses(int customerID) { // ... } } public class ProductController : ApiController { [Route("api/product")] public IEnumerable<Product> GetProducts() { // .. } [Route("api/product/{prodID}")] public Product GetProduct(int prodID) { // .. } [Route("api/product/categories/{catID}")] public Category GetCategory(int catID) { // ... } }