MVC 中,为我自己的 IHttpHandler 派生类指定路由

jmcooler 2019-04-16 05:56:16
我的 MVC 4 Web 程序中,自定义了一个 LicenceCenterHandler : IHttpHandler,并为它定义了一个路由工厂:

public class LCRouteHandler : IRouteHandler
{
public IHttpHandler GetHttpHandler( RequestContext rc )
{
return new LicenceCenterHandler(); // 返回 IHttpHandler 派生类的实例
}
}


当我在 RegisterRoutes() 中加入这个路由:
public static void RegisterRoutes( RouteCollection routes )
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

routes.Add( "ac", new Route( "ac/licencecenter", new LCRouteHandler() ) );

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


我所有视图页面中,凡是以 @Url.Action() 和 @Html.ActionLink() 生成的链接,则都带上了 "http://localhost:13230/ac/licencecenter" 这个路径,而两个函数中的参数,则都变成了 ?action=&controller= 这等字样

为什么如此? 我的目的是,要在我的网站中,处理来自一个桌面客户端程序的加密二进制数据,返回给客户端的也是加密的二进制数据,那么在 MVC 中,有什么别的办法处理 二进制数据 的进出吗?
...全文
224 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
正怒月神 版主 2019-04-17
  • 打赏
  • 举报
回复
你可以单独使用[Route("")]特性,来针对特殊的Controller扩展
stherix 2019-04-17
  • 打赏
  • 举报
回复
要实现你的功能 应该是使用过滤器(Filter) 而不是路由
jmcooler 2019-04-17
  • 打赏
  • 举报
回复
折腾我一个通宵,终于绕开这个问题,采用别的方式解决了我的需求。 MVC4 下,只要加自己的路由,例如: routes.Add( "ac", new Route( "ac/licencecenter", new LCRouteHandler() ) ); 所有页面中的链接,全都会采用 /ac/licencecenter 作为绝对 path。 不知道 MVC5 解决了这个问题没有。
jmcooler 2019-04-16
  • 打赏
  • 举报
回复
简单地说,routes.Add( "ac", new Route( "ac/licencecenter", new LCRouteHandler() ) ); 这一句路由加入后,所有页面链接都变成了 /ac/licencecenter 这个绝对路径

62,074

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧