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,出现错误:
错误:未找到
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
谁能帮我?
第一种方法: 将所需的参数作为查询字符串传递,然后更改方法,如下所示:
[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)
剩下的就和第一种方法的方法体一样了。