[英]Encoding apostrophe in GET API request via "HttpUtility.UrlEncode" and "Uri.EscapeDataString" gives error
[英]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.