【问题标题】:WebAPI MapHttpRoute issue with action parameters of type list and boolWebAPI MapHttpRoute 问题与列表和布尔类型的操作参数
【发布时间】:2014-03-23 07:42:25
【问题描述】:

我在使用 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 中运行良好。然而,一旦部署在服务器上(注意:我只使用发布向导部署网页/js/dll)Get1 工作正常,但 Get 抛出“500 Internal Server Error”

Get1 的 url 是

.../api/LVChart/Get1/

Get 是

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

我真的没有办法解决这个问题了。

谢谢

【问题讨论】:

  • 尝试使用像 ELMAH 这样的工具来记录错误,以便您可以检查堆栈跟踪并准确查看引发了哪种异常。 500 Internal Server Error 可能是操作方法抛出的任何异常。
  • 试过了,但现在显示安装 elmah 的错误...不敢相信我的运气
  • 我怀疑我的地图路线有问题?
  • 我开始认为这是方法签名。您要求提供一系列数字,但该操作需要一系列 Line 对象。

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


【解决方案1】:

为此,我认为您的自定义路由应该高于默认路由。即 DefaultApi2 和 DefaultApi3 应该高于 DefaultApi1。

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-11-21
    • 2017-11-19
    • 2013-08-30
    • 2020-02-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-15
    相关资源
    最近更新 更多