2017-05-30 6 views
2

私はそうのようなレコードを作成しようとしています:createdatrouteの場所を返す方法は?

[Route("", Name = "CreateAccount")] 
[HttpPost] 
public async Task<IHttpActionResult> CreateAccount([FromBody] JObject account) 
{ 

    var response = await _accountService.Create(account); 

    return CreatedAtRoute(
     routeName: "GetAccount",????); 
} 

成功したレコードの作成を。しかしながら。 CreatedAtRouteオブジェクトを返す方法がわかりません。

これは私のGETコントローラメソッドです:あなたは私たちがどのように、むしろ我々は、レコードを作成した後Request.RequestUri.PathAndQuery

からパラメータを取得し、コントローラは、任意のパラメータを受け付けません見ることができるよう

[Route("", Name = "GetAccount")] 
[HttpGet] 
public async Task<IHttpActionResult> GetAccount() 
{ 
    var query = Request.RequestUri.PathAndQuery.Split('/')[2]; 
    var response = _accountService.Get(query); 

    if (!response.Result.IsSuccessStatusCode) 
    { 
     return NotFound(); 
    } 

    var readAsAsync = response.Result.Content.ReadAsAsync<object>(); 
    if (readAsAsync == null) 
    { 
     return NotFound(); 
    } 

    var result = await readAsAsync; 
    return Ok(result); 
} 

有効なCreatedAtRouteの結果を返しますか?

答えて

1

ルート値をオブジェクトとして渡すことができます。フレームワークはそれらを(ルート値)をクエリ文字列に変換する必要があります。

LOCATION: http://localhost/api/accounts?id=5&name=JDoe 
ようなもので201応答して位置ヘッダーを設定する必要があり

[HttpPost] 
[Route("", Name = "CreateAccount")] 
public async Task<IHttpActionResult> CreateAccount([FromBody] JObject account) { 

    var response = await _accountService.Create(account); 

    var model = await response.Content.ReadAsAsync<MyModel>(); 

    return CreatedAtRoute(
     routeName: "GetAccount", 
     routeValues: new { id = model.Id, name = model.Name }, // can include other properties 
     content: model); 
} 

関連する問題