【问题标题】:Binding Guid in Controller method in Asp.Net CoreAsp.Net Core 中控制器方法中的绑定 Guid
【发布时间】:2021-10-09 12:01:37
【问题描述】:

我有控制器方法:

    [EnableCors("MyPolicy")]
    [Route("page/{session:guid}")]
    [HttpGet("page")]
    public async Task<ActionResult<DtoResult>> GetPageAsync(Guid session, int page = -1,  int pageSize = -1)
    {
            var result = await _paginationInfrastructure.GetDtos(session, page, pageSize, _reportManagerService);
            return Ok(result);
    }

Angular 客户端 http 代码:

getPage(sessionGuid: string, pageIndex: number, pageSize: number): Observable<ReportDtoResult> {
var paginationUrl = this.configService.getPaginationUrl();
var fullPaginationUrl = `${paginationUrl}`;
  
var paramsArgs = new HttpParams();
paramsArgs.set('session',sessionGuid);
paramsArgs.set('page',pageIndex);
paramsArgs.set('pageSize',pageSize);
return this.http.get<DtoResult>(fullPaginationUrl,{params:paramsArgs});

}

通过 Swagger 请求:

curl -X GET "https://localhost:5001/page/081B1B5A-9875-4813-B5ED-A131598B3FC4?page=-1&pageSize=-1" -H "accept: text/plain"

所以,当从客户端向服务器发送 Guid 字符串时,我得到空的 guid。 我尝试进行路由,但它不适合我。

如何提出有效的请求?

附:请求必须是:

var fullPaginationUrl = `${paginationUrl}/${sessionGuid}?page=${pageIndex}&pageSize=${pageSize}`;

而且它有效! 谢谢!

【问题讨论】:

    标签: c# asp.net-core-webapi asp.net-core-routing


    【解决方案1】:

    问题不在于您的路由设置,而在于您在 Angular 中发出请求的方式。

    您将 guid 添加为名为 session 的查询参数。相反,您需要做的是使其成为路径的一部分(根据您的配置)。

    所以你的请求应该如下所示:

    ...
    var fullPaginationUrl = `${paginationUrl}/${sessionGuid}`;
    
    var paramsArgs = new HttpParams();
    paramsArgs.set('page', pageIndex);
    paramsArgs.set('pageSize', pageSize);
    ...
    

    以上假设paginationUrlhttps://localhost:5001/page

    [Route("page/{session:guid}") 中的 session 只是指定您将 guid 映射到的参数名称在您的操作方法中

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-10-07
      • 1970-01-01
      • 2021-02-23
      • 1970-01-01
      • 2018-04-27
      • 2020-01-04
      • 2021-09-19
      • 1970-01-01
      相关资源
      最近更新 更多