繁体   English   中英

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

[英]How can I send URL parameter in ASP.NET Core Web API parameters

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

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

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

错误:未找到

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

http://...//GetShortURL/https%3A%2F%2Fgithub.com%2FVahidN%2FDNTPersianUtils.Core/TokenPass

如何使用第一个 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]
[Route("GetShortURL")]
[ApiExplorerSettings(GroupName = "ShortURL")]
public ActionResult<ServiceResult<string>> GetShortURL(string _url, string tokenPass)

然后为了提​​取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)
{
    //...
}

如果您不想使用查询字符串,最好将_url转换为 base64(在 js 中您可以使用btoa函数),然后在您的方法中,解码_url如下所示:

try
{
    var byteArrayUrl = Convert.FromBase64String(_url);
    var strUrl = System.Text.Encoding.Default.GetString(byteArrayUrl);
    var decodedUrl = System.Web.HttpUtility.UrlDecode(strUrl);
    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)
{
    //...
}

使用以下网址

http://...//GetShortURL/https%3A%2F%2Fgithub.com%2FVahidN%2FDNTPersianUtils.Core/TokenPass

_url 的值将是: 在此处输入图像描述

如果要将其转换为正确的 url,则需要在GetShortURL中将%2F替换为/

var url = _url.Replace("%2F","/");

只需将参数设为可选

[HttpGet("GetShortURL/{_url?}/{tokenPass?}")]
public ActionResult<ServiceResult<string>> GetShortURL(string _url, string tokenPass)

在这种情况下,您可以在没有任何参数、一个参数或两个参数的情况下调用该操作

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM