c# – Web Api可选参数位于中间,带有属性路由

所以我正在用Postman测试我的一些路由,我似乎无法接受这个调用

API函数

[RoutePrefix("api/Employees")]
public class CallsController : ApiController
{
    [HttpGet]
    [Route("{id:int?}/Calls/{callId:int?}")]
    public async Task<ApiResponse<object>> GetCall(int? id = null,int? callId = null)
    {
        var testRetrieve = id;
        var testRetrieve2 = callId;

        throw new NotImplementedException();
    }
}

邮差要求

http://localhost:61941/api/Employees/Calls不工作

错误

{
  "Message": "No HTTP resource was found that matches the request URI 'http://localhost:61941/api/Employees/Calls'.","MessageDetail": "No action was found on the controller 'Employees' that matches the request."
}

http://localhost:61941/api/Employees/1/Calls工程

http://localhost:61941/api/Employees/1/Calls/1工作

知道为什么我不能在我的前缀和自定义路线之间使用可选项吗?我已经尝试将它们组合成一个自定义路线,这不会改变任何东西,任何时候我试图削减它导致问题的ID.

解决方法

可选参数必须位于路径模板的末尾.所以你要做的就是不可能.

Attribute routing: Optional URI Parameters and Default Values

你要么改变你的路线temaple

[Route("Calls/{id:int?}/{callId:int?}")]

或创建一个新的动作

[RoutePrefix("api/Employees")]
public class CallsController : ApiController {

    //GET api/Employees/1/Calls
    //GET api/Employees/1/Calls/1
    [HttpGet]
    [Route("{id:int}/Calls/{callId:int?}")]
    public async Task<ApiResponse<object>> GetCall(int id,int? callId = null) {
        var testRetrieve = id;
        var testRetrieve2 = callId;

        throw new NotImplementedException();
    }

    //GET api/Employees/Calls
    [HttpGet]
    [Route("Calls")]
    public async Task<ApiResponse<object>> GetAllCalls() {
        throw new NotImplementedException();
    }
}

相关文章

在项目中使用SharpZipLib压缩文件夹的时候,遇到如果目录较深,则压缩包中的文件夹同样比较深的问题。比...
项目需要,几十万张照片需要计算出每个照片的特征值(调用C++编写的DLL)。 业务流程:选择照片...
var array = new byte[4]; var i = Encoding.UTF8.GetBytes(100.ToString(&quot;x2&quot;));//...
其实很简单,因为Combox的Item是一个K/V的object,那么就可以把它的items转换成IEnumerable&lt;Dic...
把.net4.6安装包打包进安装程序。 关键脚本如下: 头部引用字符串对比库 !include &quot;WordFunc....
项目需求(Winform)可以批量打印某个模板,经过百度和摸索,使用iTextSharp+ZXing.NetʿreeSp...