gpt4 book ai didi

javascript - Web API 参数路径太长

转载 作者:行者123 更新时间:2023-11-29 18:06:31 26 4
gpt4 key购买 nike

我正在调用 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 方法获取更大数据的适当替代方法吗?如果是这样,应该如何构造我的网址以获得正确的方法?如果不是,我该如何解决这个路径太长问题?

这是 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 的 system.web 部分的 httpRuntime 节点

<httpRuntime maxQueryStringLength="32768" />

我相信它应该开始工作了

编辑

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

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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com