1

2 つのルートを定義したいと考えています。1 つは単純に Web ルートへの get 要求です。たとえばhttp://localhost、2 つ目は 1 つのパラメーターを指定した get 要求です。たとえば、http://localhost/{sport} です。1 番目のルートは正常に機能しますが、2 番目のルートは機能しません。私は多くのバリエーションを試しました。これはそれらの1つです:

using System.Collections.Generic;
using System.Web.Http;
using System.Web.Mvc;
using System.Web.Routing;

namespace PricingBridge.RestService
{
    public class RouteConfig
    {
        public static void RegisterRoutes(RouteCollection routes)
        {
            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

            routes.MapHttpRoute(
                name: "aRoute",
                routeTemplate: "{myParam}",
                defaults: new { controller = "My", myParam = UrlParameter.Optional });
        }
    }

    public class MyController : ApiController
    {
        public string Get()
        {
            return "1";
        }

        public string Get(string myParam)
        {
            return "2";
        }
    }
}
4

3 に答える 3

3

の代わりにUrlParameter.Optional、 を使用しますRouteParameter.Optional

前者がMVC、後者がWeb APIです。

于 2013-01-30T13:39:09.563 に答える
0

間違ったクラスを使用していたことがわかりました。RouteConfigではなくWebApiConfigでルートを定義する必要がありました。

私の要件の解決策は次のとおりです(戻り値は無視してください)。

    public static class WebApiConfig
    {
        public static void Register(HttpConfiguration config)
        {
            config.Routes.MapHttpRoute("DefaultApi", "{sport}", new { controller = "bridge", sport = RouteParameter.Optional });
        }
    }

    public class BridgeController : ApiController
    {
        public IEnumerable<RestItem> GetSports()
        {
            return new[] { new RestItem("sport1", "relation") };
        }

        public IEnumerable<RestItem> GetFixtures(string sport)
        {
            return new[] { new RestItem(sport + "/fixture", "relation") };
        }
    }
于 2013-01-30T17:47:38.137 に答える
0

ルーティング構成は問題ないようです。に変更UrlParameterしてみRouteParameterてください。診断用に独自のコントローラーセレクターを作成しようとしても役に立たない場合は、コントローラーが何を呼び出しているかをインターセプトして確認するだけです。

var config = GlobalConfiguration.Configuration;
config.Services.Replace(typeof(IHttpControllerSelector), new MyControllerSelector(config))

またはアクションセレクターIHttpActionSelectorと同じです。これにより、呼び出しに対して正確に選択されているコントローラーまたはアクションを確認できます。

于 2013-01-30T11:46:22.270 に答える