繁体   English   中英

Uri.EscapeDataString或HttpUtility.UrlEncode在我的情况下不起作用

[英]Uri.EscapeDataString or HttpUtility.UrlEncode does not work for my case

我在一个项目中有一个API,我将其编码如下:

[Route("api/SearchCustomer/{customer}")]
[HttpGet]
public List<Customer> SearchCustomer(string customer)
{
    return customerRepo.GetSearchJoined(customer);
}

首先,当我从前端调用此API时遇到问题,如果客户包含点或空格(例如: https : //www.somesite.com/walmart Inc.),则会收到404错误(无法找到了此API)。 我找到一种解决此问题的简便方法。 只需添加“ /”即可解决此问题。( https://www.somesite.com/walmart Inc./)

现在,我需要在后端的另一个项目中调用此API。 所以我做了这样的事情:

var urlParm = "https://www.somesite.com/api/SearchCustomer/" + name + "/";
response = client.GetAsync(urlParm).Result;
var dataObjects = response.IsSuccessStatusCode ? response.Content.ReadAsAsync<IList<Customer>>().Result : null;
return dataObjects;

不幸的是,在后面添加“ /”不起作用。 我仍然收到404错误。 然后,我尝试使用Uri.EscapeDataString或HttpUtility.UrlEncode编码“名称”。( C#是否等效于JavaScript的encodeURIComponent()?

name = Uri.EscapeDataString(name)
or name = HttpUtility.UrlEncode(name)
or name = HttpUtility.UrlPathEncode(name)
var urlParm = "https://www.somesite.com/api/SearchCustomer/" + name + "/";
or var urlParm = = "https://www.somesite.com/api/SearchCustomer/" + name
response = client.GetAsync(urlParm).Result;
var dataObjects = response.IsSuccessStatusCode ? response.Content.ReadAsAsync<IList<Customer>>().Result : null;
return dataObjects;

我已经尝试了以上代码的所有不同匹配。 他们都没有工作。 我仍然收到404错误。 有人知道我在这里做错了吗?

很抱歉输入错误,我删除了一些敏感信息,所以我误删除了“ api”。 路线不是问题。 我已经测试了从后端的api调用是否可以在if名称仅包含字母或数字的情况下进行,但在name包含点时失败。

问题与customer参数是否编码无关。 您应该指定路由并正确应用请求。 首先确定路线;

[Route("api/SearchCustomer/{customer}")]

然后应用请求。

https://www.somesite.com/api/SearchCustomer/samplecustomer

暂无
暂无

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

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