我正在调用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)
答案 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; }
}