广告
返回顶部
首页 > 资讯 > 后端开发 > ASP.NET >.net core静态中间件的使用
  • 515
分享到

.net core静态中间件的使用

2024-04-02 19:04:59 515人浏览 泡泡鱼
摘要

目录正文结正文 我们使用静态文件调用: app.UseStaticFiles(); 那么这个默认会将我们根目录下的wwwroot作为静态目录。 这个就比较值得注意的,可能刚开

正文

我们使用静态文件调用:


app.UseStaticFiles();

那么这个默认会将我们根目录下的wwwroot作为静态目录。

这个就比较值得注意的,可能刚开始学.net core 的小伙伴,会直接把脚本写在更目录script这样是访问不到的。

当然了,你可以配置参数。可以给UseStaticFiles传递参数。不过建议不要这么干,因为这是一种默认的约定。

在wwwroot下建立一个index.html,那么访问Http://localhost/index.html


<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <title></title>
</head>
<body>
    静态文件
</body>
</html>

效果:

如果还有一些其他目录需要注册的话,那么可以这样:


app.UseStaticFiles(new StaticFileOptions
{
	RequestPath="/files",
	FileProvider = new PhysicalFileProvider(Path.Combine(Directory.GetCurrentDirectory(),"files"))
});

在根目录建立files:

然后呢,访问就是http://localhost:5000/files/index.html

接下来介绍一下UseDefaultFiles,这个是设置默认的文件。

这个不是说404,然后跳转到这个文件这里哈。

直接看下它的中间件间吧。
DefaultFilesMiddleware:


public Task Invoke(HttpContext context)
{
	if (context.GetEndpoint() == null &&
		Helpers.IsGetOrHeadMethod(context.Request.Method)
		&& Helpers.TryMatchPath(context, _matchUrl, forDirectory: true, subpath: out var subpath))
	{
		var dirContents = _fileProvider.GetDirectoryContents(subpath.Value);
		if (dirContents.Exists)
		{
			// Check if any of our default files exist.
			for (int matchIndex = 0; matchIndex < _options.DefaultFileNames.Count; matchIndex++)
			{
				string defaultFile = _options.DefaultFileNames[matchIndex];
				var file = _fileProvider.GetFileInfo(subpath.Value + defaultFile);
				// TryMatchPath will make sure subpath always ends with a "/" by adding it if needed.
				if (file.Exists)
				{
					// If the path matches a directory but does not end in a slash, redirect to add the slash.
					// This prevents relative links from breaking.
					if (!Helpers.PathEndsInSlash(context.Request.Path))
					{
						context.Response.StatusCode = StatusCodes.Status301MovedPermanently;
						var request = context.Request;
						var redirect = UriHelper.BuildAbsolute(request.Scheme, request.Host, request.PatHBase, request.Path + "/", request.QueryString);
						context.Response.Headers[HeaderNames.Location] = redirect;
						return Task.CompletedTask;
					}

					// Match found, re-write the url. A later middleware will actually serve the file.
					context.Request.Path = new PathString(context.Request.Path.Value + defaultFile);
					break;
				}
			}
		}
	}

	return _next(context);
}

里面做的事情其实很简单,将请求转换为文件路径。分为末尾是/和末尾不是/的。

比如http://localhost/a/,那么转换为wwwroot/a/路径。然后判断context.Request.Path末尾是否是/,如果是那么给文件路径加上index.html或者其他默认文件。如果判断存在的话,那么返回文件。

比如http://localhost/a,那么转换为wwwroot/a/路径。然后判断context.Request.Path末尾是不是/,如果是那么给文件路径加上index.html或者其他默认文件。如果判断存在的话,那么给路径加上/,然后返回301重新请求。

默认的在DefaultFilesOptions:


/// <summary>
/// Options for selecting default file names.
/// </summary>
public class DefaultFilesOptions : SharedOptionsBase
{
	/// <summary>
	/// Configuration for the DefaultFilesMiddleware.
	/// </summary>
	public DefaultFilesOptions()
		: this(new SharedOptions())
	{
	}

	/// <summary>
	/// Configuration for the DefaultFilesMiddleware.
	/// </summary>
	/// <param name="sharedOptions"></param>
	public DefaultFilesOptions(SharedOptions sharedOptions)
		: base(sharedOptions)
	{
		// Prioritized list
		DefaultFileNames = new List<string>
		{
			"default.htm",
			"default.html",
			"index.htm",
			"index.html",
		};
	}

	/// <summary>
	/// An ordered list of file names to select by default. List length and ordering may affect perfORMance.
	/// </summary>
	public IList<string> DefaultFileNames { get; set; }
}

有上面这几个默认的,以此按照顺序,当然你也可以传进去修改,看下参数就好。

a目录建立了一个index.html:


<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <title></title>
</head>
<body>
    这是a下面的index.html
</body>
</html>

那么访问http://localhost:5000/a 就好。

效果:

经过了一次301哈。

那么介绍一下目录预览:

增加服务:

services.ADDDirectoryBrowser();

增加中间件:

app.UseDirectoryBrowser();

这样就可以了。

如果我们前后端像这种不完全分离的情况有一个问题。

比如说,现在一般3大框架VueangularReact这种的话。你会发现一个问题,那就是他们有自己的路由。

这个时候可能就会和我们的路由冲突。

比如说http://localhost/pay 需要访问的是index.html。因为index.html有自己的路由,显示pay页面。

那么配置路由的时候应该加一条。


app.MapWhen(context =>
{
	return !context.Request.Path.Value.StartsWith("/api");
}, builder =>
{
	var option = new RewriteOptions();
	option.AddRewrite(".*","/index.html",true);
	app.UseRewriter(option);
	app.UseStaticFiles();
});

就是如果不是/api开头的,统一定位到index.html,然后再经过UseStaticFiles处理,就直接到了index.html。

RewriteOptions这些转换在细节篇中介绍。当然你也可以直接去给HttpContext body注入index.html流,然后返回,但是这样用不到一些其他特性,就不介绍了。

以上就是.Net Core静态中间件的使用的详细内容,更多关于.net core静态中间件的资料请关注编程网其它相关文章!

--结束END--

本文标题: .net core静态中间件的使用

本文链接: https://www.lsjlt.com/news/128277.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • .net core静态中间件的使用
    目录正文结正文 我们使用静态文件调用: app.UseStaticFiles(); 那么这个默认会将我们根目录下的wwwroot作为静态目录。 这个就比较值得注意的,可能刚开...
    99+
    2022-11-12
  • .net core异常中间件的使用
    目录正文结正文 if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); } 这样写入中间件哈,那么在env环境...
    99+
    2022-11-12
  • ASP.NET Core中的静态文件
    目录1.前言2.设置静态文件目录2.1 设置默认静态文件目录2.2 设置访问Web根目录外的文件3.设置HTTP响应标头4.静态文件授权5.启用目录浏览6.设置静态文件默认文档6.1...
    99+
    2022-11-13
  • .NET Core中使用gRPC的方法
    目录1.什么是gRPC1.基本介绍2.proto文件3.上手实践2.gRPC流1.服务端流、客户端流、双向流2.NetCore Web项目作为客户端3.gRPC AOP拦截1.什么是...
    99+
    2022-11-13
  • ASP.NET Core中间件如何使用
    今天小编给大家分享一下ASP.NET Core中间件如何使用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。1.前言...
    99+
    2023-06-29
  • 使用Go语言文档中的net/http.FileServer函数实现静态文件服务
    Go语言是一种简洁高效的编程语言,既可以用于开发网络应用程序,也可以用于实现静态文件服务。在Go语言的标准库中,提供了一个强大的net/http包,其中的FileServer函数可以帮助我们方便地实现静态文件服务。本文将详细介绍如何使用该函...
    99+
    2023-11-04
    net/http 关键词:Go语言 FileServer
  • .net core 中 WebApiClientCore的使用示例代码
    WebApiClient 接口注册与选项 1 配置文件中配置HttpApiOptions选项 配置示例 "IUserApi": { "HttpHost": "http://...
    99+
    2022-12-14
    .net core 中 WebApiClientCore使用 .net core  WebApiClientCore
  • .NET Core 中对象池 Object Pool的使用
    目录一、什么是对象池二、.NET Core 中的对象池三、本文小结一、什么是对象池 对象池简单来说就是一种为对象提供可复用能力的软件设计思路。我们常说有借有还,再借不难,而对象池就...
    99+
    2022-11-12
  • 教你如何利用.net core实现反向代理中间件的方法
    这篇文章主要给大家介绍了关于利用.net core实现反向代理中间件的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用.net core具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧最近在将一些项目的rest api迁...
    99+
    2023-06-03
  • 在.NET Core中使用CSRedis的详细过程
    目录CSRedis开始之前字符串(string)使用CSRedis进行简单操作非正常情况列表(list)集合(set)散列(hashmap)有序集合事务Key的过期引用CSRedis...
    99+
    2022-11-13
  • .NET 6中间件Http Logging使用介绍
    Intro .NET 6 会引入一个 Http logging 的中间件,可以用来帮助我们比较方便记录请求和响应的信息 Sample 废话不多说,直接来看示例吧 var build...
    99+
    2022-11-12
  • .NET 6中间件Http Logging怎么使用
    这篇文章主要介绍“.NET 6中间件Http Logging怎么使用”,在日常操作中,相信很多人在.NET 6中间件Http Logging怎么使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的...
    99+
    2023-06-22
  • .NetCore静态文件资源的使用
    介绍 静态文件都存储在Core Web根目录中。默认目录是<content_root>/wwwroot,但可通过 UseWebRoot方法更改访问目录。而content_...
    99+
    2022-11-13
  • ASP.NET Core使用自定义日志中间件
    这个日志框架使用的是ASP.NET Core的NLog,用来记录每次请求信息和返回信息。 1.首先创建一个Web应用项目,我选择的是MVC模板: 2.使用NuGet添加Micros...
    99+
    2022-11-13
  • .NET Core 使用委托实现动态流程组装的思路详解
    目录引言接下来进入正题2.定义特性3.编写生成代理类的逻辑3.1 编写创建代理方法3.2 重写Invoke方法4.定义一个工厂5.定义ServiceHelp6.测试6.1 编程AOP...
    99+
    2022-11-12
  • ASP.NET Core中间件用法与官方常用中间件的示例分析
    小编给大家分享一下ASP.NET Core中间件用法与官方常用中间件的示例分析,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!一、什么是中间件我们都知道,任何的一个web框架都是把http请求封装成一个管道,每一次...
    99+
    2023-06-29
  • .NET Core使用C#扫描并读取图片中的文字
    本文介绍如何通过C# 程序来扫描并读取图片中的文字,这里以创建一个.Net Core程序为例。下面是具体步骤,供参考。 程序测试环境: Visual Studio版本要求不...
    99+
    2022-11-12
  • .NET Core中对象池Object Pool的使用方法是什么
    这篇文章主要讲解了“.NET Core中对象池Object Pool的使用方法是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“.NET Core中对象池Ob...
    99+
    2023-06-25
  • .Net Core中使用Autofac替换自带的DI容器的示例
    目录项目创建方案演示.Net Core自带DI不同的特性批量注入属性注入存储并提取容器实例为什么叫浅谈呢?就是字面上的意思,讲得比较浅,又不是不能用(这样是不对的)!!! Aufof...
    99+
    2022-11-12
  • ASP.NET Core 中间件的使用之全局异常处理机制
    目录1、创建项目2、创建全局异常过滤器3、依赖注入全局异常处理机制4、测试全局异常处理机制前言: 我们经常听到“秒修复秒上线”,觉得很厉害的样子。 其实不然,这只是一个调侃而已,出...
    99+
    2022-11-12
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作