2

ASP.Net Core 1.1 Web APIを使用しています。私は以下のようにServiceTypeCodeコントローラを持っています。郵便配達中ASP.Net Core 1.1コントローラアクションでFromQueryが動作しないのはなぜですか?

[Produces("application/json")] 
[Route("api/[controller]")] 
public class ServiceTypeCodeController : Controller 
{ 
    ... 
    ... 
    ... 


    [HttpGet] 
    public IActionResult Get([FromQuery] string a_query) 
    { 
     try 
     { 
      if (string.IsNullOrEmpty(a_query)) 
      { 
       OperationResult<List<ServiceTypeCode>, string> result = m_bl.GetAllServiceTypeCodes(); 
       if (result.Success && result.Result.Count > 0) 
       { 
        return Ok(JsonConvert.SerializeObject(result.Result)); 
       } 
      } else 
      { 
       // Deserialize query into dictionary of strings and StringValues 
       var query = QueryHelpers.ParseQuery(a_query.ToLower()); 

       if (query.TryGetValue("mailclasscode", out var mailClassCode)) 
       { 
        if (!string.IsNullOrEmpty(mailClassCode)) 
        { 
         OperationResult<List<ServiceTypeCode>, string> result = m_bl.GetAllServiceTypeCodes(mailClassCode); 
         if (result.Success && result.Result.Count > 0) 
         { 
          return Ok(JsonConvert.SerializeObject(result.Result)); 
         } 
        } 
       } 
       if (query.TryGetValue("stc", out var stc)) 
       { 
        if (!string.IsNullOrEmpty(stc)) 
        { 
         OperationResult<ServiceTypeCode, string> result = m_bl.GetServiceTypeCode(stc); 
         if (result.Success) 
         { 
          return Ok(JsonConvert.SerializeObject(result.Result)); 
         } 
        } 
       } 
      } 
      return NotFound(); 
     } 
     catch (Exception ex) 
     { 
      string msg = "An exception occurred while trying to get a list of ServiceTypeCodes from the database."; 
      m_logger.LogError(1, ex, msg); 
      ApiError error = BuildError("Server Error - Exception", "500", "Get", ex, msg); 
      return Ok(JsonConvert.SerializeObject(error)); 
     } 

    } 

私は、URLを使用する場合...

http://localhost:5000/api/servicetypecodes 

GET動詞と予想通り、私は、サービスタイプコードのリストを取得します。私は、このような

http://localhost:5000/api/servicetypecodes?mailclasscode=fc 

...として、クエリ文字列として何も追加して

if (string.IsNullOrEmpty(a_query)) 

場所で自分のコードにブレークポイントを設定しようとした場合しかし、a_queryの値が代わりにnullであります予想される "mailclasscode = fc"の

私はここで何が欠けていますか?

ご協力いただきありがとうございます。

+1

それは期待している文字列変数の名前でなければなりませんあなたは.NetCoreは(あなたの変数名を使用して)そのようなコードで定義することによってどのように知っているように持っていますa_query - > mailclasscode – Terrance00

+0

Terrance - ユーザーがhttp:// localhost:5000/api/servicetypecodes?mailclasscode = fcまたはhttp:// localhost:を使用させたい場合は、 5000/api/servicetypecodes?stc = 123、mailclasscodeまたはstcでフィルタリングしているかどうかによって、必要があります public IActionResult Get([FromQuery] string mailclasscode、[FromQuery string stc] は正しいですか? – EiEiGuy

+0

それはうまくいった。ありがとうTerrance。あなたが回答を投稿したいのであれば、私はあなたが信用を得るように、それを正しいものとしてマークするのが喜ばしいでしょう。 – EiEiGuy

答えて

5

.Net Core Controllerメソッドの変数名は、送信するものと同じでなければなりません。

http://localhost:5000/api/servicetypecodes?mailclasscode=fc 

コントローラメソッドは次のようになりしなければならないデータを渡すために、そのURLを使用する場合:

[HttpGet] 
public IActionResult Get([FromQuery] string mailclasscode) 
{...} 

またはその逆。

幸運なコーディング。

0

クエリ文字列名は、メソッドの変数名と異なる場合があります。

[HttpGet] 
public IActionResult Get([FromQuery(Name = "mailclasscode")] string a_query) 
{ 
    ... 
} 

またはより一般的に:

[HttpGet] 
public IActionResult Get([FromQuery(Name = "myQueryStringParamName")] string myCodeParamName) 
{ 
    ... 
} 
関連する問題