Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 通过自定义身份验证筛选器(或等效筛选器)发送对static.htm文件的请求_C#_Asp.net Mvc - Fatal编程技术网

C# 通过自定义身份验证筛选器(或等效筛选器)发送对static.htm文件的请求

C# 通过自定义身份验证筛选器(或等效筛选器)发送对static.htm文件的请求,c#,asp.net-mvc,C#,Asp.net Mvc,我有一个ASP.NET MVC应用程序,在其中我在应用程序的几个部分使用自定义授权过滤器 [MyCustomAuthorize] class MyController { } 这在很长一段时间内一直行之有效 现在,我想向应用程序添加另一个部分,它基本上是一个预构建的React应用程序-一个包含index.htm文件、JS、CSS和其他资源文件的子文件夹结构 当用户导航到此子应用时,我希望它们通过在我的自定义授权属性中实现的相同授权过程发送。但很自然,由于它是一个静态的.htm文件,我无法对其应

我有一个ASP.NET MVC应用程序,在其中我在应用程序的几个部分使用自定义授权过滤器

[MyCustomAuthorize]
class MyController
{
}
这在很长一段时间内一直行之有效

现在,我想向应用程序添加另一个部分,它基本上是一个预构建的React应用程序-一个包含index.htm文件、JS、CSS和其他资源文件的子文件夹结构

当用户导航到此子应用时,我希望它们通过在我的自定义授权属性中实现的相同授权过程发送。但很自然,由于它是一个静态的.htm文件,我无法对其应用任何属性

我试图通过将其放置在MVC控制器后面来解决此问题:

using MyApp.Filters;
using System.Web.Mvc;

namespace MyApp.Controllers
{
    [MyCustomAuthorize]
    public class SubAppController : Controller
    {
        public ActionResult Index()
        {
            return File("~/SubApp/index.htm", "text/html");
        }
    }
}
但是如果我导航到https://mydomain/SubApp/ 就是IIS找到index.htm文件并提供该文件,而不是通过控制器发送请求

如果我将index.htm重命名为其他名称并尝试以这种方式提供服务:

using MyApp.Filters;
using System.Web.Mvc;

namespace MyApp.Controllers
{
    [MyCustomAuthorize]
    public class SubAppController : Controller
    {
        public ActionResult Index()
        {
            return File("~/SubApp/subapp.htm", "text/html");
        }
    }
}
然后,似乎IIS看到了https://mydomain/SubApp/ 请求以尝试访问物理子应用/文件夹,并返回403响应

我意识到我可以通过物理方式将子应用程序内容放置在一个与控制器名称不同的文件夹中来解决这两个问题,但这将引入另一个问题,即子应用程序的所有资源文件(CSS、JS等)不再位于访问子应用程序的路径的子路径中(即,浏览器将访问https://mydomain/SubApp/ 而.css将在https://mydomain/SubAppFiles/styles.css)。我希望尽可能避免这种情况,并将所有资源(物理上和概念上)包含在SubApp/文件夹中

有没有一种相对简单的方法可以让它在不需要对主应用进行太多修改的情况下正常工作


我认为理想的情况是找到一些方法让IIS不尝试处理对
https://mydomain/SubApp/
(只有一条路径,没有其他路径)并允许ASP.NET应用程序处理它,但到目前为止,我还没有找到这样做的方法。

将其创建为razor文件,其中没有任何特定于razor的项目,并将其作为视图。若要进一步自动化,请添加预构建步骤,将所述文件重命名为cshtml,或将最新的html复制到预先存在的cshtml文件中。@AthanasiosKataras Th感谢您的建议,但我认为这与我上面描述的第二次尝试基本相同。存在
SubApp/
文件夹(及其所有资源文件等)仍然会导致IIS“劫持”请求
https://mydomain/SubApp/
并防止它到达控制器。我意识到我可以通过将资源文件放在一个具有不同名称的文件夹中,并使用
。/
或使用绝对路径访问所有资源文件来解决这个问题,但如果可能的话,我希望避免这样做。