Web API小写路由

时间:2013-04-02 15:00:51

标签: asp.net routes asp.net-web-api url-routing

那里,

我需要在我的Web API项目中强制使用Lowercase路由。 如果它是一个MVC项目,我会使用像

这样的东西
routes.LowercaseUrls = true;

但是在Web API中,属性不存在。

我尝试了LowercaseRoutesMVC4 NuGet扩展,但我的路由需要有一个自定义处理程序,以便扩展程序对我没用。

我该怎么办?

2 个答案:

答案 0 :(得分:6)

看起来它就像你需要的那样

public class RouteConfig
{
    public static void RegisterRoutes(RouteCollection routes)
    {
        routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "api/{controller}/{id}",
            defaults: new { id = RouteParameter.Optional },
            constraints: new { url = new LowercaseRouteConstraint() }
        );
    }
}

public class LowercaseRouteConstraint : IRouteConstraint
{
    public bool Match(HttpContextBase httpContext, Route route, string parameterName, RouteValueDictionary values, RouteDirection routeDirection)
    {
        var path = httpContext.Request.Url.AbsolutePath;
        return path.Equals(path.ToLowerInvariant(), StringComparison.InvariantCulture);
    }
}

我在https://gist.github.com/benfoster/3274578#file-gistfile1-cs-L4

找到了这个

答案 1 :(得分:-2)

我有json配置像

public class JsonConfig
{
    public static void Initiliaze(HttpConfiguration config, bool isCamelCase)
    {
        var json = config.Formatters.JsonFormatter;
        json.SerializerSettings.PreserveReferencesHandling = PreserveReferencesHandling.None;
        json.SerializerSettings.ReferenceLoopHandling = ReferenceLoopHandling.Ignore;
        json.SerializerSettings.Formatting = Formatting.None;

        if (isCamelCase)
            json.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver();

        config.Formatters.Remove(config.Formatters.XmlFormatter);
    }
}

您可以在WebApiConfig.cs中调用此方法,如

JsonConfig.Initiliaze(config, true);