3

こんにちは、私は属性のルーティングに新しいですし、これが可能であるかどうかはわかりません。私が持っているもの複数のオプションパラメータweb api属性のルーティング

は、私は私の検索を絞り込むためにいくつかの追加のオプションパラメータを追加したいが、この

[HttpGet] 
[Route("GetIssuesByFlag/{flag:int=3}")] 
public IEnumerable<IssueDto> GetIssuesByFlag(int flag) 

は今ので、私は2つの余分なオプションのパラメータを追加するように正常に動作属性ルートです。

私は何をしようとしている:私の呼び出しは/api/controller/1/2 ですが、それはどのように私はこれを達成することができます/api/controller/1

に来るとき404で失敗した場合

[HttpGet] 
[Route("GetIssuesByFlag/{flag:int=3?}/{categoryId:int?}/{tagIds?}")] 
public IEnumerable<IssueDto> GetIssuesByFlag(int flag , int? categoryId = null, int?[] tagIds = null) 

これは正常に動作しますか?

編集1:Nkosiさんの答えはうまくいきましたが、追加の修正が必要でした。値が提供されていないとクエリ文字列を使用し=ヌル

+1

'{flag:int = 3?}'が問題になります。アクションのデフォルト値である '{flag:int?}'または '{flag:int = 3}'のいずれかです。現在、3つのオプションのパラメータがあります。あなたが1つの値ルーティングテーブルを持っているときは、あなたが参照しているオプションのパラメータが分からないので、404 – Nkosi

+0

Nikosiの答えが私のために働いた!最初の1つは分割したものではなく、すべてが正常に機能していることを今すぐ確認しました – Harry

+0

最初のもの(フラグからオプションの削除)を回答で更新できるので正しいとマークできますか? – Harry

答えて

1

{flag:int=3?}が問題です。アクションのデフォルト値を指定した{flag:int?}(オプション)または{flag:int=3}です。

[HttpGet] 
Route("GetIssuesByFlag/{flag:int=3}/{categoryId:int?}/{tagIds?}")] 
public IEnumerable<IssueDto> GetIssuesByFlag(int flag , int? categoryId = null, int?[] tagIds = null) 

現在、3つのオプションパラメータがあります。あなたが参照しているオプションのパラメータを知っていないので、404

0

でオプションとしてマークする傾けるならば、それは自動的にnullであるとしてリスト又はアレイ

[HttpGet] 
[Route("GetIssuesByFlag/{flag:int=3}/{tagIds?}/{categoryId:int?}")] 
public IEnumerable<IssueDto> GetIssuesByFlag(int flag , List<int> tagIds, int? categoryId = null) 

は、第二のなければなりません。

[HttpGet] 
    [Route("GetIssuesByFlag/{flag:int=3?}")] 
    public IEnumerable<IssueDto> GetIssuesByFlag(int flag, List<int> tagIds, int? categoryId = null) 

URL:?/ getissuesbyflag/1 tagIds = 2,5,6 &区分= 56

それらが必要とされる場合は、本当にオプションのパラメータとパスパラメータのためのクエリ文字列を使用する必要があります。

+0

すべての変数を提供しても動作しますが、単にフラグを指定すると "message"で失敗します: "リクエストURIと一致するHTTPリソースが見つかりませんでした。" https:// localhost:44363/api/Issues/GetIssuesByFlag/1 '。 "、 " messageDetail ":"要求に一致するコントローラー' Issues 'でアクションが見つかりませんでした。 " – Harry

関連する問題