WebApi 2 GET在参数中具有特殊字符

时间:2016-04-06 13:05:39

标签: c# angularjs asp.net-web-api asp.net-web-api2

当我使用特殊字符(正常字符都正常工作)的字符串参数调用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的最佳方式?

3 个答案:

答案 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)));
    }