【问题标题】:How can I generate constant urls for my ASP.NET MVC actions?如何为我的 ASP.NET MVC 操作生成常量 url?
【发布时间】:2015-02-08 08:40:03
【问题描述】:

我想为我的操作生成常量 url。像这样的:

public const string ControllerName_ActionName = "/ControllerName/ActionName";

我曾尝试使用 T4MVC,但它只生成带有 T4MVC_System_Web_Mvc_ActionResult 的方法。 有没有不痛的解决办法?

我想在外部项目中将它们用作库。该项目不知道我的 MVC 应用程序。它可以是一个带有 WebClient 的简单控制台应用程序。

【问题讨论】:

    标签: c# asp.net-mvc t4 t4mvc


    【解决方案1】:

    从网络应用程序中

    T4MVC 还为Url.Action() 生成了一个新的扩展方法。所以例如现在你可以使用这样的东西:

    return Redirect(Url.Action(MVC.Account.Index()));

    来自外部库

    T4MVC 仅生成常量,因此您可以确定当它编译时,路由将正确生成运行时。生成包含url => Controller.Action 之类的文件并不容易,因为这取决于您的路由配置、url 通配符、排序、http 协议等。

    如果您的项目不了解 MVC 应用程序,并且您希望拥有一个包含常量 url 的文件,那么如果您的路线如下,那么该文件将如何生成:

          routes.MapRoute(
              name: "Catch-all content route",
              url: "{*url}",
              defaults: new { controller = "ContentPage", action = "Index" }
    

    【讨论】:

    • 最重要的是,T4MVC 有一个称为配置文件的东西 - 您可以自定义很多内容和生成方式。
    • 我想将外部项目中的常量用作库。该项目不知道我的 MVC 应用程序。它可以是一个带有 WebClient 的简单控制台应用程序。
    • @Neshta 使您的控制台应用程序违反 HATEOS 约束的唯一原因就是更加脆弱。您的 MVC 应用程序可以了解您的 MVC 应用程序,您的客户端可以知道索引页面的 URI,该 URI 在启动时告诉它 URI。客户端启动时的一个额外 Web 请求解决了这个问题,并且还为您提供了很大的未来更改空间。
    【解决方案2】:

    我为我的问题定制了 T4MVC 模板:

    public static class UrlConst {
    <#foreach (var controller in DefaultArea.GetControllers()) {
        foreach (var action in controller.ActionMethods.ToList())
        { #>
        public const string <#=controller.Name#>_<#=action.ActionName#> =
            "/<#=controller.Name#>/<#=action.ActionName#>";
      <#}   
    } #>
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-11-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多