2016-04-29 6 views
1

私は、第三者のURLにデータを投稿する必要があるAngularJSアプリを持っています。 CORSブラウザの問題を回避するために、私は自分の.netコントローラにデータをポストしています。そして、それが第三者のURLに投稿されます。私のjavascriptファイルでは、私はサードパーティのURLに渡すクエリ文字列を構築しました。ここに私のコードであることを私のネットコントローラへ投稿:AngularJsがクエリ文字列をC#コントローラに投稿

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です。クエリ文字列をコントローラに渡すには何が必要ですか?

+0

このMVCまたはWeb APIは、 –

+0

@ user1024941 - あなたの問題を解決する答えがありましたか?もしそうなら、それを受け入れられたものとしてマークします。 –

答えて

1

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(); 
} 
+0

これはあまりテスト可能ではありません。 –

+0

"system.web.httprequestbase"に 'content'の定義が含まれていないというエラーが表示されます。 – user1024941

+0

WebApiではなくMVCを使用しているようです。変更された回答をご覧ください。 –

0

あなたはこれを試すことができます。

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

これは、 "型または名前空間の名前 'Formatting'が 'system.net.http'という名前空間に存在しないというエラーを示します" 私はSystem.Net.Httpを使用しています。私のクラスのトップに。 – user1024941

+0

プロジェクトでSystem.Net.Httpアセンブリを参照しましたか? – hdkhardik

2

これを試すことができますか?まず、コントローラのポストリクエスト定義内のすべてのパラメータを定義するだけですか?第二に - 私はあなたのURLに誤りがあると思い、あなたがの後にスラッシュを必要としない「/ユーザーフォーム/ 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 ""; 
} 
関連する問題