首页 > 解决方案 > ASP.NET Core 路由空参数

问题描述

我有一种方法的控制器。路由涵盖下一个场景:

1. userId="1" ,userEmail=null https://localhost:44371/api/customers/1
1. userId="1" ,userEmail="1" https://localhost:44371/api/customers/1/1

主要问题是什么时候发送请求userId=nulluserEmail="1"。使用%20和请求类似的东西https://localhost:44371/api/customers/%20/1?什么是正确的方法?

[HttpGet("{userId}")]
[HttpGet("{userId}/{userEmail}")]
[ApiController]
public class CustomersController : ControllerBase
{
    public JsonResult GetCustomer(string userId, string userEmail)
    {
        return new JsonResult(string.Format("userId: {0}, email: {1} ", userId, userEmail));
    }
}

标签: c#jsonasp.net-core.net-coreasp.net-core-mvc

解决方案


您以错误的方式进行路由,因此将代码更改为此,因为您需要在操作方法中进行路由

[ApiController]
[Route("api/[controller]")]
public class CustomersController : ControllerBase
{
    [HttpGet("{userId}/{userEmail}")]
    public JsonResult GetCustomer(string userId, string userEmail)
    {
        return new JsonResult(string.Format("userId: {0}, email: {1} ", userId, userEmail));
    }
}

所以你可以像这样请求api

https://localhost:44371/api/customers/1

另一个例子

[Route("[controller]/[action]")]
public class ProductsController : Controller
{
    [HttpGet] // Matches '/Products/List'
    public IActionResult List() {
        // ...
    }

    [HttpGet("{id}")] // Matches '/Products/Edit/{id}'
    public IActionResult Edit(int id) {
        // ...
    }
}

推荐阅读