我在项目中有一个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名称只包含字母或数字,但是当名称包含点时失败。
答案 0 :(得分:1)
问题与customer
参数编码与否无关。您应该指定路由并正确应用请求。首先修复路线;
[Route("api/SearchCustomer/{customer}")]
然后应用请求。
https://www.somesite.com/api/SearchCustomer/samplecustomer