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

时间:2018-01-23 16:53:58

标签: c# .net urlencode

我在项目中有一个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来编码“name”。(Does C# have an equivalent to JavaScript's 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”。路线不是问题。我已经测试过,来自后端的appi名称只包含字母或数字,但是当名称包含点时失败。

1 个答案:

答案 0 :(得分:1)

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

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

然后应用请求。

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