WebAPI MapHttpRoute问题与list和bool类型的动作参数有关

时间:2014-02-21 16:55:36

标签: asp.net .net asp.net-web-api asp.net-mvc-routing asp.net-web-api-routing

我在WebAPI上遇到了部署时间问题,如果有人可以提供帮助,我将不胜感激。

路线:

        public static void Register(HttpConfiguration config)
    {
        // Web API configuration and services

        // Web API routes
        config.MapHttpAttributeRoutes();
        config.Routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "api/{controller}/{id}",
            defaults: new { id = RouteParameter.Optional }
        );
        config.Routes.MapHttpRoute(
            name: "DefaultApi2",
            routeTemplate: "api/{controller}/{action}/{id}",
            defaults: new { id = RouteParameter.Optional }
        );
        config.Routes.MapHttpRoute(
            name: "DefaultApi3",
            routeTemplate: "api/{controller}/{action}/{lines}/{swapAxis}",
            defaults: new
            {
                controller = "LVChart",
                action = "Get",
                lines = RouteParameter.Optional, 
                swapAxis = RouteParameter.Optional
            }
        );
    }

行动:

    // GET api/<controller>
    public IEnumerable<string> Get1()
    {
        return new string[] { "value1", "value2" };
    }
    // GET api/<controller>
    [ActionName("Get")]
    public string Get([FromUri] List<Line> lines, bool swapAxis)
    {
        _lineBuilder = new LVLineBuilder(swapAxis);
        string result = BuildLines(lines);
        return result;
    }

现在好了,这就是问题所在。 Get1和Get(..)在localhost中运行良好。但是只要在服务器上部署(注意:我只使用发布向导部署webpages / js / dll)Get1工作正常但是抛出“500内部服务器错误”

Get1的网址是

.../api/LVChart/Get1/

Get是

.../api/LVChart/Get/?lines[]=15&lines[]=11&lines[]=12&lines[]=3&lines[]=10&lines[]=7&swapAxis=false

我真的没有关于如何解决这个问题的选择。

由于

1 个答案:

答案 0 :(得分:1)

为此,我认为你的自定义路线应该超越dafault路线。即DefaultApi2和DefaultApi3应高于DefaultApi1。

同样要成为RESTfull,你也可以尝试避免额外的默认路由,只使用默认路由1并HttpGet/api/LVChart,就像这样

.../api/LVChart?lines[]=15&lines[]=11&lines[]=12&lines[]=3&lines[]=10&lines[]=7&swapAxis=false