【发布时间】:2016-02-02 20:18:59
【问题描述】:
尝试使用以下 url 调用以下方法时遇到 404 错误
[HttpGet]
[Route("api/Trinity/GetDirectoryAndTask/{modelTemplateId}/{taskName}")]
public KeyValuePair<string, string> GetDirectoriesAndTasks(int modelTemplateId, string taskName)
http://localhost:46789/api/Trinity/GetDirectoryAndTask/9/Tax+H%3a+AG43SS+GMIB%3b+no+fpws%3b+d%26r
此 url 来自对字符串“Tax H: AG43SS GMIB; no fpws; d&r”调用 HttpUtility.UrlEncode()。如果有另一种方法来完成传递这个字符串,我也愿意接受。
如果我将其称为“更简单”的任务名称,则该方法可以正常工作
http://localhost:46789/api/Trinity/GetDirectoryAndTask/9/Roth
我安装了 RouteDebugger nuget 包,但它不是很有帮助。为了完整起见,这里是我的 WebApiConfig.cs 文件
using System.Web.Http;
namespace DbService
{
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
// Web API routes
MapRoutes(config);
}
private static void MapRoutes(HttpConfiguration config)
{
config.MapHttpAttributeRoutes();
//config.Routes.MapHttpRoute(
// name: "DefaultApi",
// routeTemplate: "api/{controller}/{id}",
// defaults: new { id = RouteParameter.Optional }
//);
}
}
}
和RouteConfig.cs文件
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Routing;
namespace DbService
{
public class RouteConfig
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
}
}
}
【问题讨论】:
标签: c# asp.net-web-api routing