我正在对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)
最佳答案
通过更新的调用,“ 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; }
}
关于javascript - Web API参数路径过长,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30759593/