【问题标题】:AngularJs post query string to c# controllerAngularJs 将查询字符串发布到 c# 控制器
【发布时间】:2016-04-29 01:46:19
【问题描述】:

我有一个 AngularJS 应用程序,它必须将数据发布到第 3 方 URL。为了解决 CORS 浏览器问题,我将数据发布到我的 .net 控制器,然后将其发布到第 3 方 URL。在我的 javascript 文件中,我构建了要传递给第 3 方 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 变量为空。我需要做什么才能将我的查询字符串传递给我的控制器?

【问题讨论】:

  • 这是 MVC 还是 Web API?
  • @user1024941 - 是否有任何答案解决了您的问题。如果是这样,请将它们标记为已接受。

标签: javascript c# asp.net angularjs


【解决方案1】:

你可以试试这个吗?首先 - 你为什么不在控制器发布请求定义中定义所有参数?其次 - 我猜你的 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 "";
}

【讨论】:

    【解决方案2】:

    如果这是针对 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();
    }
    

    【讨论】:

    • 这不是很可测试。
    • 我收到错误“system.web.httprequestbase'不包含'content'的定义”。
    • 似乎您使用的是 MVC 而不是 WebApi。查看更改后的答案。
    【解决方案3】:

    你可以试试这个。

    [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;
    }
    

    【讨论】:

    • 这给出了错误“类型或命名空间名称 'Formatting' 在命名空间 'system.net.http' 中不存在”我使用 System.Net.Http;在我班上名列前茅。
    • 您在项目中是否引用了 System.Net.Http 程序集?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-06
    • 1970-01-01
    • 1970-01-01
    • 2011-10-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多