Asp.Net Core 中控制器方法中的绑定 Guid
Posted
技术标签:
【中文标题】Asp.Net Core 中控制器方法中的绑定 Guid【英文标题】:Binding Guid in Controller method in Asp.Net Core 【发布时间】: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`;
而且它有效! 谢谢!
【问题讨论】:
【参考方案1】:问题不在于您的路由设置,而在于您在 Angular 中发出请求的方式。
您将 guid 添加为名为 session
的查询参数。相反,您需要做的是使其成为路径的一部分(根据您的配置)。
所以你的请求应该如下所示:
...
var fullPaginationUrl = `$paginationUrl/$sessionGuid`;
var paramsArgs = new HttpParams();
paramsArgs.set('page', pageIndex);
paramsArgs.set('pageSize', pageSize);
...
以上假设paginationUrl
是https://localhost:5001/page
[Route("page/session:guid")
中的 session
只是指定您将 guid 映射到的参数名称在您的操作方法中
【讨论】:
以上是关于Asp.Net Core 中控制器方法中的绑定 Guid的主要内容,如果未能解决你的问题,请参考以下文章
ASP.NET Core 模型未通过 AJAX 绑定到控制器