匹配单个特定 url 的自定义路由

Posted

技术标签:

【中文标题】匹配单个特定 url 的自定义路由【英文标题】:Custom route that match a single specific url 【发布时间】:2021-05-08 16:37:58 【问题描述】:

在我的 mvc 应用中,我想动态生成一个特定的 url:

https://myapp.corp.com/.well-known/microsoft-identity-association.json

此端点应根据 web.config 文件中的值生成一个小文件。所以我创建了这个控制器:

public class HostingController : Controller

    // GET: Hosting
    [OutputCache(Duration = 100, VaryByParam = "none")]
    public ActionResult MicrosoftIdentityAssociation() => Json(new
    
        associatedApplications = new[]
            
            new  applicationId = WebConfigurationManager.AppSettings.Get("ClientId") 
            
    );

我改变了这样的路由配置:

    public static void RegisterRoutes(RouteCollection routes)
    
        routes.IgnoreRoute("resource.axd/*pathInfo");

        routes.MapRoute(
            "Azure domain registration",
            ".well-known/microsoft-identity-association.json",
            new  controller = "Hosting", action= "MicrosoftIdentityAssociation" 
            );

        routes.MapRoute(
            name: "Default",
            url: "controller/action/id",
            defaults: new  controller = "Home", action = "Index", id = UrlParameter.Optional 
        );
    

我希望 url 生成像这样的 json:


  "associatedApplications": [
    
      "applicationId": "1562019d-44f7-4a9d-9833-64333f52181d"
    
  ]

但是当我定位到 url 时,我得到了一个 404 错误。

怎么了?如何解决?

【问题讨论】:

【参考方案1】:

你可以使用路由属性:

    [Route("~/.well-known/microsoft-identity-association.json")]
   [OutputCache(Duration = 100, VaryByParam = "none")]
    public ActionResult MicrosoftIdentityAssociation() 

..... your code

在邮递员中测试过。

【讨论】:

【参考方案2】:

Asp.Net MVC 无法创建具有扩展名的路由。我必须编辑我的 Web.config 以将 MVC 框架插入这个非常具体的文件。

具体来说:

  <system.webServer>    
    <handlers>
      <add name="Azure domain verifier"
        path=".well-known/microsoft-identity-association.json"
        verb="GET" type="System.Web.Handlers.TransferRequestHandler"
        preCondition="integratedMode,runtimeVersionv4.0" responseBufferLimit="0"
     />
    </handlers>
  </system.webServer>

从现在开始,我可以使用 routeconfig.cs 文件或 [RouteAttribute] 路由到我的自定义控制器操作

【讨论】:

以上是关于匹配单个特定 url 的自定义路由的主要内容,如果未能解决你的问题,请参考以下文章

请教一个 MVC 自定义路由的问题

仅显示特定自定义帖子类型的自定义分类计数

未执行 TYPO3 v9 上具有 StaticMappableAspectInterface 的自定义路由方面

如何根据 vue.js 中的自定义权限授予访问路由的权限?

Blackberry Bold - 无法识别 URL 甚至注册的自定义模式

WooCommerce:为特定页面添加使用 WordPress 自定义字段添加到购物车旁边的自定义按钮