2012-05-24 6 views
6

に郵便物は、私は次のルートASP.NETウェブAPI - カスタムアクションコントローラ

routes.MapHttpRoute(
    name: "DefaultApi", 
    routeTemplate: "api/{controller}/{action}/{id}", 
    defaults: new { id = RouteParameter.Optional }); 

と次ApiController

public class ValuesController : ApiController 
{ 
    // GET /api/values 
    public IEnumerable<string> Get() 
    { 
     return new string[] { "value1", "value2" }; 
    } 

    public User CreateUser(User user) 
    { 
     user.Id = 1000; 
     return user; 
    } 
} 

を持っていると私は、このサービスを利用したいと思います。私は最初の方法を使用することができます:

var client = new WebClient(); 
    var result = client.DownloadString(@"http://localhost:61872/api/values/get"); 

しかし、私は2番目の方法を消費することはできません。私は次に何をするとき:サービスメソッドのパラメータにカスタムオブジェクトを設定する

  1. 何が正しい方法:

    var user = new User() { Name = "user1", Password = "pass1" }; 
        var json = Newtonsoft.Json.JsonConvert.SerializeObject(user); 
        result = client.UploadString(@"http://localhost:61872/api/values/createuser", json); 
    

    iは、追加情報

    The remote server returned an error: (500) Internal Server Error.

    せずに次の例外をキャッチし、私は2つの質問がありますか?

  2. このような「魔法」の例外に関する追加情報はどうすれば入手できますか?

答えて

8

使用すると、サーバは要求がエンコードされている方法を知らないと、あなたのAPIコントローラのアクションをとるuserパラメータがnullの場合、あなたは適切Content-Typeリクエストヘッダを設定していることを確認してくださいJSONリクエストを送信する場合:

using (var client = new WebClient()) 
{ 
    client.Headers[HttpRequestHeader.ContentType] = "application/json"; 
    var user = new User() { Name = "user1", Password = "pass1" }; 
    var json = Newtonsoft.Json.JsonConvert.SerializeObject(user); 
    var result = client.UploadString(@"http://localhost:61872/api/values/createuser", json); 
} 
+3

ああ、男、あなたに感謝し、私は))あなたからそのジョークをchidrens何))とあなたは私asp.net/mvc以外WEBAPIに関するドキュメントといくつかのlinлsを与えることができますか? – slavsergey