mvc 发布后 css一些文件访问出403 禁止访问: 访问被拒绝问题

最近用mvc做项目出个问题,用debug=true 生成浏览时没有问题,访问一切正常;

可是用debug=false发布后,打开网站正常,但是没有样式,检查下代码发现有个css文件是没有下载下来;

发布后的css链接是这样的

<link href="/Content/css?v=V8chMYqVlF5EyjvwkQMmV6yejW7LVy0_eSLYrG" rel="stylesheet">

浏览器打开这个路径(/Content/css?v=V8chMYqVlF5EyjvwkQMmV6yejW7LVy0_eSLYrG)出现403 禁止访问: 访问被拒绝;后来看下浏览器的路径会发现路径自动在css后面加上了个"/",也就是变成了这样/Content/css/?v=V8chMYqVlF5EyjvwkQMmV6yejW7LVy0_eSLYrG (注意多了红色的“/”);这个说明浏览器找的是css这个文件夹而不是翻译前的css文件,而且直接访问真实的css链接(真实链接:/Content/site.css)可以正常打开。为什么会这样呢,看了下其它css正常,只有这个是有问题?

解决:

Content文件夹下面确实还有个css的文件夹,把css这个文件夹删除再发布,问题解决;



其它相关代码

绑定代码是这样

bundles.Add(new StyleBundle("~/Content/css").Include("~/Content/site.css"));
生成的css这样
/Content/css?v=V8chMYqVlF5EyjvwkQMmV6yejW7LVy0_eSLYrG
实际路径

/Content/site.css




在ASP.NET MVC中,如果你想要禁止未登录用户直接访问服务器上的静态资源(如CSS、JS、图片等),可以采取以下步骤: 1. **配置授权中间件**: - 在`Startup.cs`的`ConfigureServices`方法里添加身份验证服务,比如添加`ApplicationCookieMiddleware`或`AuthenticationDefaults.Mvc`选项。 ```csharp services.AddAuthentication(options => { options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme; options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme; }).AddJwtBearer(options => ...); // 这里假设你已经配置了JWT认证 ``` 2. **启用ActionFilter**: 使用`AuthorizeAttribute`或自定义过滤器来限制对特定控制器或操作的访问。例如,在每个需要权限控制的Controller上加上`[Authorize]`,防止未登录访问静态文件的Action。 ```csharp [Authorize] public class StaticFilesController : Controller { [HttpGet("styles/{fileName}")] public IActionResult GetStyles(string fileName) { //... } } ``` 3. **处理静态文件请求**: 对于直接访问的静态资源路径,通常会有一个单独的Controller或一个特殊的路由来处理。在`Startup.cs`的`MapRoute`方法中,设置一个只允许匿名访问的路由来指向专门处理静态资源的目录。 ```csharp routes.MapAreaRoute( name: "StaticFiles", template: "{*path}", defaults: new { controller = "StaticFiles", action = "Index" }, constraints: new { path = @"^(?!.*(css|js|images|fonts)/).*$" } // 匹配非静态资源目录的URL ); ``` 4. **处理401未经授权错误**: 如果未登录用户尝试访问受保护的静态资源,MVC框架默认会返回401 Unauthorized响应。你可以选择如何处理这个错误,比如重定向到登录页面。 通过上述步骤,静态文件将不会现在浏览器地址栏中,而是显示401 unauthorized提示,除非用户已登录并有相应的权限。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值