vb.net MVC 5 HTTP属性路由控制器基类内部具有未定义的路由段变量

时间:2019-01-17 15:31:54

标签: asp.net-mvc vb.net

我正在运行VB.Net MVC 5站点,并创建了一个继承Controller类的MvcControllerBaseClass类。然后,所有控制器都将从该基类继承。

我正在使用此基类来定义路由,该路由使我们可以将与视图关联的javascript文件放置在与视图相同的目录中。

物理结构最终看起来像这样,例如:

/Views
   /Example
      Index.vbhtml
      Index.js

ExampleController继承了MvcControllerBaseClass,在此示例中将使用的路由配置为:

/Example/Index
/Example/Scripts/Index.js

这是我正在使用的“ MvcControllerBaseClass.vb”文件:

Imports System.Web.Mvc
Imports xWebUI.JavaScriptViews
Imports System.IO

Namespace MyApp
    Public Class MvcControllerBaseClass
        Inherits Controller

        ' The full route path will be the RoutePrefix defined in the controller that inherits this class combined with the Route below,  eg: Example/Scripts/somefile.js
        <Route("Scripts/{filename}")>
        Function Scripts(filename As String) As ActionResult
            Dim ControllerName As String = System.Web.HttpContext.Current.Request.RequestContext.RouteData.Values("controller").ToString()
            Dim filePath As String = Server.MapPath("~/Views/" & ControllerName & "/" & System.Web.HttpContext.Current.Request.RequestContext.RouteData.Values("id").ToString()) ' the real file path
            Return Content(System.IO.File.ReadAllText(filePath), "text/javascript")
        End Function


    End Class
End Namespace

这是我正在使用的ExampleController.vb控制器文件:

Namespace MyApp
    <RoutePrefix("Example")>
    Public Class ExampleController
        Inherits MvcControllerBaseClass

        '/example/index            
        Function Index() As ActionResult                
            Return View()
        End Function   

    End Class
End Namespace

在MvcControllerBaseClass文件中定义的/Example/Script/Index.js路由正在运行但没有达到预期的

“ filename”变量始终为Nothing,但路由定义<Route("Scripts/{filename}")>表示文件名ID段是必需的字符串,并且当我浏览至{{时,实际上正在执行关联的方法Function Scripts(filename As String) As ActionResult 1}} 那文件名变量为什么没有呢?

我能够通过从routedata'id'值/Example/Scripts/Index.js中提取文件名来解决此问题,但令我困扰的是文件名变量没有按预期填充,并且我不想后来因为它而遇到了任何无法预料的问题。

有人能看到为什么会这样吗?

也请注意: 如果我不使用基类,而是将基类中的逻辑直接放入控制器,那么文件名参数值就是我所期望的。我只是试图不必每次都将这段代码复制到每个控制器中。

0 个答案:

没有答案