Javascript Web API post参数

Javascript Web API post参数,javascript,c#,asp.net-web-api,Javascript,C#,Asp.net Web Api,我目前有一个webapi调用问题。我想用ApicController下载并打开一个日志文件。 我使用javascript函数将文件名发布到我的控制器 下面是一个用于发布参数的帮助函数(来自dystroy的答案): 现在,当我在控制器中使用一个简单的字符串作为参数时,我无法获取参数,它总是空的 public HttpResponseMessage PostDownloadLogFile([FromBody]string psFileName) { //psFileName is alwa

我目前有一个webapi调用问题。我想用ApicController下载并打开一个日志文件。 我使用javascript函数将文件名发布到我的控制器

下面是一个用于发布参数的帮助函数(来自dystroy的答案):

现在,当我在控制器中使用一个简单的字符串作为参数时,我无法获取参数,它总是空的

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
的控制器方法可以正常工作

以下是浏览器请求:

问题可能出在发送数据的客户端代码中

[FromBody]
参数必须编码为
=value

那么,这是行不通的:

// Value will be null.
$.post('api/values', value);

// Value will be null.
$.post('api/values', { key: value });
但这项工作:

$.post('api/values', "=" + value);
尝试更改客户端代码,以便只将
=/path/发送到/your/文件中

参考资料:

好的,我找到了解决方案。 如果我使用
类作为参数和具有给定名称的属性,它似乎可以工作

public class Param
{
    public string psFileName { get; set; }
}


这不是一个简单的参数,但我可以接受这个解决方案。

发送到控制器方法的数据是什么样子的?这是本文中的一个javascript帮助函数:helper函数有四个参数:动词、url、数据和目标。您向数据变量(以及其他所有变量)传递的是什么?helper.openWindow(“POST”,apiRoutes.url.apippostdownloadlogfile,{“psFilename”:$scope.data.showLogEntry.FullName});请将浏览器请求粘贴到这里好吗?使用HTTP头和正文。我尝试了它,但不幸的是该值仍然为空。我试着这样做:helper.openWindow(“POST”,apiRoutes.url.apippostdownloadlogfile,“=”+$scope.data.showLogEntry.FullName);这是:helper.openWindow(“POST”,apiRoutes.url.apippostdownloadlogfile,{'':$scope.data.showLogEntry.FullName});
public HttpResponseMessage PostDownloadLogFile(Param poParam)
{
    string psFileName = poParam.psFileName; //psFileName is set correct