0

短くてシンプル。次のようなルートがあります。

config.Routes.MapHttpRoute(
                name: "QuickSearch",
                routeTemplate: "QuickSearch/{searchQuery}",
                defaults: new { controller = "QuickSearch", action = "Search" },
                constraints: new { httpMethod = new HttpMethodConstraint(new string[] { "GET" }), }
                );

そして、次のようなアクション:

public class QuickSearchController : ApiController
    {
        [HttpGet]
        public QuickSearchResponse Search(string searchQuery)
        {
        }
    }

を呼び出すhttp://localhost:4096/QuickSearch/SearchMeと、「SearchMe」が searchQuery パラメータにバインドされ、Search メソッドが正常に呼び出されます。

ただし、電話をかけるhttp://localhost:4096/QuickSearch/?searchQuery=SearchMeと、「要求された URL: /QuickSearch」が見つからないという 404 メッセージが表示されます。

上記の URL は同等だと思いましたか? クエリ文字列を使用すると機能しないのはなぜですか?

4

1 に答える 1

0

オプションのパラメーターとして searchQuery を追加すると、クエリ文字列を使用してコントローラー アクションをヒットできるはずです。

config.Routes.MapHttpRoute(
    name: "QuickSearch",
    routeTemplate: "QuickSearch/{searchQuery}",
    defaults: new { controller = "QuickSearch", action = "Search", searchQuery = RouteParameter.Optional },
    constraints: new { httpMethod = new HttpMethodConstraint(new string[] { "GET" }), }
    );
于 2013-08-28T10:09:47.497 に答える