$ http.get将encodeURIComponent传递给Web API

时间:2016-10-06 10:47:57

标签: angularjs asp.net-web-api

我想将一些特殊字符(_ + - )传递给我的web api,现在我知道我必须在编码它们的javascript中使用encodeURIComponent()。但是当我将编码的url传递给http.get时,它会抛出异常:

获取请求代码:

    find: function (id) {
        var scope = this;
        var urlApi = webapi_base_url + model_url;

        id = encodeURIComponent(id);

        return $http.get(urlApi + id)
                    .then(function (response) {

                        if (response.data.success && response.data.exists) {
                            //logger.info('Successfully found model', '', 'Success');
                        }
                        else {
                            if (showLogger)
                                logger.error(response.data.error, '', 'Error');
                        }

                        return response.data;
                    })
                            .catch(function (err) {
                                scope.WebFailed('get', err);
                    })
    }

例如,我想将值a+传递给我的网络API,网址为:

  

https://localhost:44310/api/v1/model/a%26

抛出以下错误:

  

XMLHttpRequest无法加载https://localhost:44310/api/v1/model/a%26。对预检请求的响应未通过访问控制检查:请求的资源上不存在“Access-Control-Allow-Origin”标头。因此,不允许原点“http://localhost:59242”访问。响应的HTTP状态代码为400。

当我将'a'的值发送到Web API时,没问题:

网络API代码

[Route("{description}")]
public async Task<IHttpActionResult> Get([FromUri] string description)
{
Model model = await _repository.Model().Get().Where(x => x.Description == description).FirstOrDefaultAsync();

if (model == null)
    return Ok(new { success = false, exists = false, error = "Could not find model" });

return Ok(new { success = true, exists = true });
}

我认为当我编写uri时,web api无法找到路径并且会抛出异常。

任何想法如何修复web api以允许编码字符。

由于

0 个答案:

没有答案