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
问题?
[Route("api/services/files/{serverName}/{path}")]
[HttpGet]
public IEnumerable<FileDll> Files(string serverName, string path)
随着你更新的调用,'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; }
}