1

我想定义两条路线。一种是简单的对Web 根目录的get 请求,例如http://localhost,第二种是带有一个参数的get 请求,例如http://localhost/{sport}。我可以让第一条路线正常工作,但第二条路线不行。我尝试了很多变化。这是其中之一:

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

原来我使用了错误的课程。我应该在 WebApiConfig 中定义路由,而不是在 RouteConfig 中。

我的要求的解决方案如下(忽略返回值):

    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

您的路由配置似乎很好。尝试更改UrlParameterRouteParameter,当尝试制作自己的控制器选择器进行诊断无济于事时,仅用于拦截以查看控制器在那里调用的内容和 .

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

或与操作选择器IHttpActionSelector相同。它将让您查看为您的呼叫准确选择了哪些控制器或操作。

于 2013-01-30T11:46:22.270 回答