【问题标题】:Processing request URLs from browser by the .NET Framework.NET Framework 处理来自浏览器的请求 URL
【发布时间】:2013-06-16 06:58:42
【问题描述】:

.net 框架如何知道传入 URL 的处理方式?

我的问题不是关于应用程序中的路由机制。

我想知道系统中的 .net 框架如何发现它必须将请求委托给它的 MVC 程序集以将 URL 路由到适当的控制器和操作。

我希望问题很清楚。

刚刚在 stackoverflow 中看到了一些其他问题,并遇到了这个链接,这在一定程度上解释了我的猜测。 https://docs.google.com/file/d/0B0_EIyBZvSQsOTU3N2Q2NDEtMWNjMS00ZTc0LWJmMjUtM2I0M2I5NDY2ZDNl/edit?pli=1

此链接有详细信息 http://stephenwalther.com/archive/2008/03/18/asp-net-mvc-in-depth-the-life-of-an-asp-net-mvc-request

【问题讨论】:

    标签: asp.net asp.net-mvc web-applications


    【解决方案1】:

    如果您将应用程序托管在 IIS 中,那么当有请求进入时,该请求最初会被 IIS 拦截。假设您将应用程序托管在名为/myapp 的虚拟目录中。当请求以/myapp 开头时,IIS 将处理对相应 ASP.NET 管道的请求的执行。然后,ASP.NET 管道将解析传入的请求并搜索可以为请求提供服务的相应托管处理程序。如果找到可以为请求提供服务的托管处理程序,则处理将传递给此处理程序。在作为 ASP.NET MVC 应用程序的情况下,它将是 MvcHandler,然后将负责路由和分派到适当的控制器和操作以服务请求。

    【讨论】:

    • 没有像 MVC urltraditional webForms url 这样的概念。你知道什么是 ASP.NET MVC 吗?它是一个传统的 ASP.NET 处理程序。 IIS 所知道的只是托管的 ASP.NET 处理程序。一旦找到合适的处理程序,它将把处理传递给这个处理程序。 MvcHandler 本身将知道如何解释您注册的路由以及要实例化哪个控制器以及要调用哪个动作。但请记住,ASP.NET MVC 并没有什么特别之处。它只是一个经典的 webForms 处理程序,已注册以处理所有传入请求。 IIS 对 ASP.NET MVC 一无所知。
    • ASP.NET MVC 只是一个托管的经典 ASP.NET WebForms 处理程序。 ASP.NET MVC 本身并不是一种特殊类型的应用程序。主机只是一个经典的 ASP.NET 应用程序。许多人误以为 ASP.NET MVC 是一种特殊的东西。一点也不。它是一个简单的托管处理程序,它拦截对相应 AppDomain 的所有请求,而不是呈现一些经典的 ASPX 页面,而是将处理传递给路由引擎以选择适当的控制器和要执行的操作。
    • 不,这绝对是错误的。 IIS 对路由一无所知。 IIS 将处理执行到相应的托管处理程序。在 MVC 应用程序的情况下,这将是 MvcHandler。正是这个处理程序负责解析您的路由并将请求分派给相应的控制器。 MvcHandler 只是一个普通的IHttpHandler,任何人都可以写。
    • 好的,现在回到你提到的原始问题,IIS 将处理相应托管处理程序的执行,如果是 MVC 应用程序,那将是 MvcHandler。 IIS 是如何知道这一点的?对不起,如果我问的问题太基本了。
    • 你已经在 IIS 中创建了一个虚拟目录,对吧?配置此虚拟目录时,您已经为其分配了特定的 .NET Framework 版本,对吗?这个虚拟目录映射到硬盘上的某个物理位置,对吧?在这个物理位置,你有一个 web.config,对吧?这就是它知道它是一个 ASP.NET 应用程序的方式。请记住,这就是 IIS 需要知道的全部内容 -> 它是一个 ASP.NET 应用程序。然后它将执行传递给这个托管应用程序。
    猜你喜欢
    • 1970-01-01
    • 2011-12-30
    • 1970-01-01
    • 2019-09-12
    • 2017-05-07
    • 1970-01-01
    • 2019-06-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多