[英]How can I send JSON response to client from ASP.NET Core Web API?
[英]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
时,出现错误:
错误:未找到
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)
{
//...
}
只需将参数设为可选
[HttpGet("GetShortURL/{_url?}/{tokenPass?}")]
public ActionResult<ServiceResult<string>> GetShortURL(string _url, string tokenPass)
在这种情况下,您可以在没有任何参数、一个参数或两个参数的情况下调用该操作
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.