Web API参数路径太长

时间:2015-06-10 14:38:56

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

我正在调用Web API方法:

var url = rootWebApiUrl + '/api/services/files/' + $scope.selectedServer.Name + "/" + encodeURIComponent(fullPath) + '/';

$http.get(url) // rest of $http.get here...

因为fullPath变量很长,所以我在框架方法中的PhysicalPath属性上出现path too long错误:

if (System.Web.HttpContext.Current != null && System.Web.HttpContext.Current.Request.PhysicalPath.Length > 0)
    return ApplicationConfigurationWeb;

所以我想也许我可以做这样的事情来传递数据,但我似乎无法调用正确的Web API方法:

var req = {
    method: 'GET',
    url: rootWebApiUrl + '/api/services/files',
    params: { serverName: $scope.selectedServer.Name, path: fullPath }
}

$http(req)  // rest of get here...

这是将更大的数据提供给Web API方法的合适替代方法吗?如果是这样,我的网址应该如何构建才能获得正确的方法?如果没有,我如何才能解决此path too long问题?

这是Web API方法签名:

[Route("api/services/files/{serverName}/{path}")]
[HttpGet]
public IEnumerable<FileDll> Files(string serverName, string path)

1 个答案:

答案 0 :(得分:4)

通过更新后的调用,'params'应该最终成为查询字符串,因此如果您将webapi路由更新为:

[Route("api/services/files")]

并将此属性添加到web.config的httpRuntime部分中的system.web节点

<httpRuntime maxQueryStringLength="32768" />

我相信它应该开始工作

修改

正如DavidG所提到的,更合适的方式是发布数据而不是使用get。为此,您需要将请求配置更改为:

var req = {
    method: 'POST',
    url: rootWebApiUrl + '/api/services/files',
    data: { serverName: $scope.selectedServer.Name, path: fullPath }
}

然后像这样更新你的路线:

[Route("api/services/files")]
[HttpPost]
public IEnumerable<FileDll> Files(FileData myData)

其中FileData是一个看起来像这样的类:

public class FileData
{
    public string serverName { get; set; }
    public string path { get; set; }
}