Web API参数路径过长

本文关键字:路径 参数 API Web | 更新日期: 2023-09-27 17:54:51

我正在调用一个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方法?如果是这样,我的url应该如何构造以获得正确的方法?如果没有,我该如何解决这个path too long问题?

这是Web API方法签名:
[Route("api/services/files/{serverName}/{path}")]
[HttpGet]
public IEnumerable<FileDll> Files(string serverName, string path)

Web API参数路径过长

随着你更新的调用,'params'应该最终成为查询字符串,所以如果你更新你的webapi路由为:

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

并将此属性添加到web.config

system.web部分的httpRuntime节点中
<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; }
}