当我使用特殊字符(正常字符都正常工作)的字符串参数调用webapi2 GET 时出现问题。
AngularJs
this.getByContactValue = function (contactValue) {
return $http.get("/api/subjects/"+ contactValue+ "/ContactValue" );
}
c#中
[Route("api/subjects/{contactValue}/ContactValue")]
public IEnumerable<Subject> GetByContactValue(string contactValue)
{
return repository.GetByContactValue(contactValue);
}
响应为 404错误。 我也尝试以这种方式修改请求
this.getByContactValue = function (contactValue) {
var request = $http({
method: "get",
url: "/api/subjects/ContactValue", //modified the route in c# controller
data: contactValue
});
return request;
}
但错误是一样的。
这是调用webapi的最佳方式?
答案 0 :(得分:2)
您必须将查询字符串中的数据作为
传递$http({
url: "/api/subjects/ContactValue",
method: "GET",
params: {contactValue: contactValue}
});
更新您的行动
[Route("api/subjects/ContactValue?contactValue={contactValue}")]
public IEnumerable<Subject> GetByContactValue(string contactValue)
{
return repository.GetByContactValue(contactValue);
}
答案 1 :(得分:1)
最后我以这种方式解决了
[Route("api/subjects/ContactValue")]
public IEnumerable<Subject> GetByContactValue([FromUri]string contactValue)
{
return repository.GetByContactValue(contactValue);
}
答案 2 :(得分:0)
最简单的方法是使用encodeURI或 encodeURIComponent ,它将在url中编码数据。
Ts-
let bg= encodeURIComponent(contactValue);
return AuthAxios.get(`${APINAME}?bg=${bg}`);
API
[HttpGet(nameof(GetBgList))]
public async Task<IActionResult> GetBgList(string bg)
{
return Ok(MessageAlert.DataFound(await _bgService.GetBgList(bg)));
}