AngularJs将查询字符串发布到c#控制器

AngularJs post query string to c# controller

本文关键字:控制器 查询 字符串 AngularJs      更新时间:2023-09-26

我有一个AngularJS应用程序,它必须将数据发布到第三方URL。为了解决CORS浏览器的问题,我将数据发布到我的.net控制器,然后该控制器将其发布到第三方URL。在我的javascript文件中,我已经构建了要传递给第三方URL的查询字符串。这是我发布到.net控制器的代码:

var parms = "name=john&phone=1234567890&sex=male";
return $http({
                    url: '/UserForm/PostData/',
                    method: "POST",
                    data: parms
                });

我的c#控制器:

[HttpPost]
public string PostData(String parms)
{
    return "";
}

PostData中的parms变量为null。我需要做什么才能将查询字符串传递到控制器?

你能试试这个吗?首先,为什么不在控制器请求后定义中定义所有参数?第二,我想你的URL中有一个错误,你不需要在"/UserForm/PostData"后面加斜线(当然,如果你在MVC中没有使用一些自定义路由)

$http.post("/UserForm/PostData", { name: "john", phone: "1234567890", sex: "male" }).then(blahblahal....;

+

[HttpPost]
public string PostData(String name, String phone, String sex)
{
    return "";
}

如果这是针对WebApi控制器的,则不尝试将parms作为传递给操作的参数来读取,而是使用ReadAsString来读取发布的数据。在您的示例中,结果应该与parms变量中的值相同。

[HttpPost]
public IHttpActionResult PostData()
{
    var parms = Request.Content.ReadAsStringAsync().Result;
    // Submit parms to third-party api.
    return Ok();
}

这个任务更适合WebApi,但如果你需要使用MVC控制器,你可以通过阅读Request.InputStream:来阅读发布的内容

public ActionResult PostData()
{
    string parms;
    using (var sr = new System.IO.StreamReader(Request.InputStream))
    {
         parms = sr.ReadToEnd();
    }
    // Submit parms to third-party api.
    return new EmptyResult();
}

你可以试试这个。

[HttpPost]
public string PostData(System.Net.Http.Formatting.FormDataCollection form)
{
    string name=form.get("name");
    string phone=form.get("phone");
    string sex=form.get("sex");
}

或者你也可以尝试这个解决方案,你只需要添加几行。

public class PersonData
{
   public string name { get; set; }
   public string phone { get; set; }
   public string sex { get; set; }
}
[HttpPost]
public string PostData([FromBody]PersonData form)
{
   string name=form.name;
   string phone=form.phone
   string sex=form.sex;
}