【发布时间】:2015-04-22 09:05:29
【问题描述】:
我目前遇到了 webapi 调用的问题。我想用我的 ApiController 下载并打开一个日志文件。 我使用 javascript 函数将文件名发布到我的控制器。
这是一个发布参数的辅助函数(来自dystroy的答案): How to replace window.open(...) with a POST
现在,当我在控制器中使用简单字符串作为参数时,我无法获取参数,它始终为空。
public HttpResponseMessage PostDownloadLogFile([FromBody]string psFileName)
{
//psFileName is always null
但是,如果我使用HttpReqeustMessage 作为参数并从我的请求中读取表单数据,则没有问题并且可以正常工作。
public HttpResponseMessage PostDownloadLogFile(HttpRequestMessage poRequest)
{
var loFormData = poRequest.Content.ReadAsFormDataAsync().Result;
string psFileName = loFormData["psFileName"]; //psFileName is set correct
有没有办法在我的控制器中用一个简单的参数来获取参数?
更新
这是我的 javascript 辅助函数:
var loOpenWindow = function (psMethode, psUrl, poData, psTarget) {
var loForm = document.createElement("form");
loForm.action = psUrl;
loForm.method = psMethode;
loForm.target = psTarget || "_self";
if (poData) {
for (var lsKey in poData) {
var loInput = document.createElement("textarea");
loInput.name = lsKey;
loInput.value = typeof poData[lsKey] === "object" ? JSON.stringify(poData[lsKey]) : poData[lsKey];
loForm.appendChild(loInput);
}
}
loForm.style.display = "none";
document.body.appendChild(loForm);
loForm.submit();
};
叫它:
helper.openWindow("POST", apiRoutes.URLS.ApiPostDownloadLogFile, { "psFilename": $scope.data.showLogEntry.FullName });
客户端代码应该没有问题,因为带有HttpReqeustMessage 的控制器方法可以正常工作。
这是浏览器请求:
【问题讨论】:
-
您发送到控制器方法的数据是什么样的?
-
这是来自这篇文章的 javascript 帮助功能:stackoverflow.com/questions/17793183/…
-
辅助函数有四个参数:verb、url、data、target。您将什么传递给 data 变量(以及所有其他变量)?
-
helper.openWindow("POST", apiRoutes.URLS.ApiPostDownloadLogFile, { "psFilename": $scope.data.showLogEntry.FullName });
-
你能把浏览器请求粘贴到这里吗?带有 HTTP 标头和正文。
标签: javascript c# asp.net-web-api