如何在 ASP.NET Core Web API 参数中发送 URL 参数

Sey*_*far 7 c# asp.net-core-webapi

我在 C# ASP.NET Core Web API 项目中编写了以下代码:

[HttpGet]
[Route("GetShortURL/{_url}/{tokenPass}")]
[ApiExplorerSettings(GroupName = "ShortURL")]
public ActionResult<ServiceResult<string>> GetShortURL(string _url, string tokenPass)
Run Code Online (Sandbox Code Playgroud)

当我输入此参数时_url,出现错误:

错误:未找到

https://github.com/VahidN/DNTPersianUtils.Core

http://...//GetShortURL/https%3A%2F%2Fgithub.com%2FVahidN%2FDNTPersianUtils.Core/TokenPass
Run Code Online (Sandbox Code Playgroud)

如何使用第一个 Web URL 参数调用此 API?当我将 [Route("GetShortURL/{_url}/{tokenPass}")] 更改为 [Route("GetShortURL")] 时,问题得到了解决,但我想通过/而不是通过发送查询?例如,我想这样调用API:

1-http://..../GetShortURL/_UrlParam/_TokenPassParam

不像下面这样:

2- http://..../GetShortURL?_url=_urlParam&tokenPass=_TokenPassParam

第二种方法工作正常,但是当我传递这样的 URL 时,我希望第一种方法能够正常工作

https%3A%2F%2Fgithub.com%2FVahidN%2FDNTPersianUtils.Core

谁能帮我?

mah*_*rkh 2

第一种方法: 将所需的参数作为查询字符串传递,然后更改方法,如下所示:

[HttpGet("GetShortURL")]
[ApiExplorerSettings(GroupName = "ShortURL")]
public ActionResult<ServiceResult<string>> GetShortURL(string _url, string tokenPass)
Run Code Online (Sandbox Code Playgroud)

然后,要提取 url 的不同部分(协议、域名、路径和查询字符串),请使用下面的代码(路径是一个用斜杠分隔的数组):

try
{
    var decodedUrl = System.Web.HttpUtility.UrlDecode(_url);
    Uri uri = new Uri(decodedUrl);    
    var scheme = uri.Scheme;            
    var host = uri.Host;
    var absolutePathSeperatedBySlash = uri.AbsolutePath.Split('/').Skip(1).ToList();
    var query = uri.Query;
    // rest of the code ...
     
}
catch (Exception ex)
{
    //...
}
Run Code Online (Sandbox Code Playgroud)

第二种方法:

如果你希望它作为 url 参数发送,首先你必须在 javascript 中对_urlwith的值进行编码encodeURIComponent(),以确保一些特殊字符,例如, / ? : @ & = + $ #被更改。

然后:

[HttpGet("GetShortURL/{_url}/{tokenPass}")]
[ApiExplorerSettings(GroupName = "ShortURL")]
public ActionResult<ServiceResult<string>> GetShortURL(string _url, string tokenPass)
Run Code Online (Sandbox Code Playgroud)

剩下的就和第一种方法的方法体一样了。