c# - 通过自定义身份验证过滤器(或等效过滤器)发送对静态 .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/ 请求视为访问物理 SubApp/ 文件夹的尝试,并返回 403 响应。
我意识到我可以通过将子应用程序内容物理放置在与控制器名称不同的文件夹中来解决这两个问题,但这会引入另一个问题,即所有子应用程序的资源文件(CSS、JS 等) .) 不再位于访问子应用程序的路径的子路径中(即浏览器将访问 https://mydomain/SubApp/ 并且 .css 将位于 https://mydomain/SubAppFiles /styles.css)。如果可能,我想避免这种情况,并将所有资源(物理上和概念上)包含在 SubApp/ 文件夹中。
有没有一种相对简单的方法可以让它很好地工作而无需对主应用程序进行过多的检修?
我认为理想的情况是找到某种方法让 IIS不尝试处理对https://mydomain/SubApp/
(仅是一条路径而没有别的)的请求并允许 ASP.NET 应用程序处理它,但到目前为止,我一直没有成功地找到一种方法来做到这一点。
解决方案
推荐阅读
- git-bash - 在 git bash 中执行“.exe”文件时遇到问题
- ruby-on-rails - 使用 ruby graphql 返回未持久化的 activerrecord 是否危险?
- push-notification - Capacitor PushNotifications 注册和注册错误在 iOS 上的第一次应用启动中未触发
- regex - 如何在正则表达式中仅匹配前导空格后跟非数字
- symfony - 添加没有时间冲突的预订
- javascript - Javascript中回调的词法环境
- ruby-on-rails - Heroku Slug 大小减少 - .slugignore 问题
- node.js - ERR_HTTP_HEADERS_SENT 节点js套接字连接
- php - 在while循环之前来自mysqli查询的回显变量
- python - csrf-token 和 Scrapy 上的登录问题