标签: kestrel-http-server

从ASP.NET Core 2.1应用程序中删除"Server"标头

是否可以删除ASP.NET Core 2.1应用程序中的服务器响应标头(在带有IIS 10的Server 2016上运行)?

我尝试将以下内容放在web.config中:

<system.webServer>
    <httpProtocol>
        <customHeaders>
            <add name="X-Frame-Options" value="sameorigin" />
            <add name="X-XSS-Protection" value="1; mode=block" />
            <add name="X-Content-Type-Options" value="nosniff" />
            <remove name="X-Powered-By" />
            <remove name="Server" />
        </customHeaders>
    </httpProtocol>
</sytem.webServer>
Run Code Online (Sandbox Code Playgroud)

响应的前四个更改工作正常,但未删除Server标头.我还是看"红隼"

web-config kestrel-http-server asp.net-core asp.net-core-2.1

14
推荐指数
6
解决办法
6658
查看次数

Visual Studio继续将IIS Express添加回我的launchsettings.json

我试图从我的.NET Core启动设置中删除IIS Express配置文件,但每次重新编写解决方案时,Visual Studio都会重新添加它.例如,在新项目中,我的启动设置如下所示

{
  "iisSettings": {
    "windowsAuthentication": false,
    "anonymousAuthentication": true,
    "iisExpress": {
      "applicationUrl": "http://localhost:55735/",
      "sslPort": 0
    }
  },
  "profiles": {
    "IIS Express": {
      "commandName": "IISExpress",
      "launchBrowser": true,
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development"
      }
    },
    "MyProject": {
      "commandName": "Project",
      "launchUrl": "http://localhost:5010",
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development"
      }
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

我删除了IIS部分

{
  "profiles": {
    "MyProject": {
      "commandName": "Project",
      "launchUrl": "http://localhost:5010",
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development"
      }
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

解决方案运行正常.但是一旦我关闭并重新打开解决方案,IIS部分就会重新出现.

有任何想法吗?

iis-express .net-core kestrel-http-server asp.net-core-webapi

12
推荐指数
1
解决办法
1473
查看次数

停止在kestrel上运行的运行dotnet核心网站

部署新版本的现有.net核心网站时.我如何首先安全地停止旧的运行的茶隼应用程序?

以下是我想写的内容(伪部署脚本):

dotnet stop mysite/mysite.dll <---- this line here
mv mysite/ mysite.bak/
cp newly-published-mysite/ mysite/
dotnet run mysite/mysite.dll
Run Code Online (Sandbox Code Playgroud)

killall dotnet似乎有点不安全.如果我在一个盒子上托管两个小网站,它会如何运作?

linux .net-core kestrel-http-server asp.net-core

12
推荐指数
2
解决办法
1万
查看次数

asp.net core/kestrel中的线程管理

我正在使用我们迁移到asp.net core 2.0的asp.net应用程序来解决性能/可伸缩性问题.我们的应用程序托管在azure上作为应用程序服务,并且在任何中等流量下都很容易下降.

令我困惑的一件事是如何处理多个并发请求.从我在这里读到的,Kestrel使用多个事件循环来处理您的请求.但是实际的用户代码是在.net线程池上处理的(就在这里).

所以,作为一个实验 - 我创建了一个新的asp.net核心2.0 MVC应用程序,并添加了一个相当讨厌的动作方法:

    [AllowAnonymous]
    public ActionResult Wait1()
    {
        System.Threading.Tasks.Task.Delay(1000).Wait();
        return new StatusCodeResult((int)HttpStatusCode.OK);
    }     
Run Code Online (Sandbox Code Playgroud)

现在,当我把它推到azure时,我希望如果我同时发送100个请求,那么我应该没问题,因为100个请求听起来像是轻微的负载,对吗?等待将发生在线程池线程上,对吧?

所以 - 我这样做并得到一些相当差的结果 - 样本用红色突出显示:

在此输入图像描述

嗯,不出我所料,每个请求约50秒......但是,如果我改变频率,所以请求被分隔开的第二,那么响应时间是罚款 - 刚刚超过1000毫秒回到正如你所期望.看来,如果我同时发出超过30个请求,它开始受到影响,这对我来说似乎有点低.

所以 - 我意识到我讨厌的动作方法会阻塞,但我已经预料到它会阻塞线程池线程,因此能够应对超过我的30.

这是预期的行为 - 如果是这样,只是确保在不使用异步代码的情况下不进行IO绑定工作的情况?

multithreading azure azure-web-sites kestrel-http-server asp.net-core

12
推荐指数
1
解决办法
7083
查看次数

为什么我会尝试将404大文件发布到Core Web API

我是一个非常新的文件传输HttpClient和Web API,所以请原谅我的代码中的任何无知和猜测.我一直试图将创建的文件发布System.IO.Compression.ZipFile到我的Web API大约一天,并且总是得到404响应.如果我使用空流发布,则会调用API操作方法,因此我知道404是由于内容而不是URI.

此方法位于尝试发布文件的客户端WPF应用程序中:

public async Task PostDirAsync(string localDirPath, string serverDir)
{
    var sourcePath = Path.Combine("Temp", Guid.NewGuid() + ".zip");
    ZipFile.CreateFromDirectory(localDirPath, sourcePath, CompressionLevel.Fastest, true);
    StreamContent streamContent;
    using (var fs = File.Open(sourcePath, FileMode.Open))
    {
        var outStream = new MemoryStream();
        await fs.CopyToAsync(outStream);
        outStream.Position = 0;
        streamContent = new StreamContent(outStream);
    }
    streamContent.Headers.Add("Content-Type", "application/octet-stream");
    var resp = await _client.PostAsync("api/File/PostDir?serverPath={WebUtility.UrlEncode(serverDir)}", streamContent);
}
Run Code Online (Sandbox Code Playgroud)

这是接收帖子的Web API中的操作方法,但前提是我outStream.Position = 0;在尝试发布之前不执行此操作:

[HttpPost("PostDir")]
[DisableRequestSizeLimit]
public async Task<IActionResult> PostDir(string serverPath)
{           
    var zipName = Path.Combine(_config["QuickDrive:TempDir"], Guid.NewGuid() + …
Run Code Online (Sandbox Code Playgroud)

c# dotnet-httpclient kestrel-http-server asp.net-core asp.net-core-2.0

12
推荐指数
1
解决办法
3110
查看次数

删除 Kestrel 绑定警告

在 ASP.NET Core 2.1 项目中使用 Kestrel 并在 中指定绑定时UseKestrel(),会在警告级别记录一条消息:

Overriding address(es) 'http://localhost:50000/'. Binding to endpoints defined in UseKestrel() instead.

这给我们的日志增加了噪音,报告了一个默认(因此令人困惑)的 URL,并且不应该是一个警告。除了记录器本身过滤消息之外,有没有办法配置网络主机构建器,使其在启动时不记录?

kestrel-http-server asp.net-core asp.net-core-2.1

12
推荐指数
4
解决办法
9773
查看次数

Windows 服务中托管的 Kestrel 的 Windows 身份验证

我正在运行托管在 Windows 服务中的 ASP.NET Core 应用程序,如下所述:

https://docs.microsoft.com/en-us/aspnet/core/host-and-deploy/windows-service?view=aspnetcore-2.1

我需要此应用程序来支持 Windows 身份验证。我有哪些选择?我尝试在 IIS 中使用应用程序请求路由/URL 重写模块作为 Windows 身份验证的反向代理,但无法弄清楚如何使其工作。任何指导将不胜感激。

.net windows-services kestrel-http-server asp.net-core

12
推荐指数
3
解决办法
1万
查看次数

我可以在ASP.net Core 2.0 Preview中的appsettings.json中设置监听URL吗?

我正在创建一个在.net Core 2.0运行时运行的ASP.net Core 2.0应用程序,这两个应用程序目前都处于预览版本.但是,我无法弄清楚如何让Kestrel使用除默认http://localhost:5000侦听URL 之外的其他内容.

我可以在谷歌谈论一个server.urls设置的大多数文档,即使在1.0预览中也似乎已经改变urls,但是两者都没有用(打开调试日志记录让Kestrel告诉我没有配置监听端点).

很多文档也谈到了a hosting.json,我不能使用默认的appsettings.json.但是,如果我比较加载新配置的推荐方法,这看起来与新WebHost.CreateDefaultBuilder方法完全一样,除了它加载appsettings.json.

我目前还不明白appsettings.json IConfigureOptions<T>是如何相关的,如果有的话,那么我的麻烦可能源于对KestrelServerOptionsSetup实际操作缺乏了解.

appsettings .net-core kestrel-http-server asp.net-core

11
推荐指数
3
解决办法
1万
查看次数

仅对特定路由或控制器要求SSL客户端证书

我有一个使用Kestrel作为服务器的ASP.NET MVC Core项目.它既提供用户内容(asp.net mvc),又提供代理(软件)与之通信的主机Web API控制器.我已启用HTTPS和客户端证书支持.问题是我想要为调用Web API的代理(软件)要求客户端证书,但我不想要为常规基于浏览器的用户要求/提示客户端证书.

我通过以下方式启用了HTTPS /客户端证书支持:

var host = new WebHostBuilder()
.UseKestrel(options =>
{
    HttpsConnectionFilterOptions httpsoptions = new    HttpsConnectionFilterOptions();
    httpsoptions.ServerCertificate = CertUtil.GetServerCert();
    httpsoptions.ClientCertificateMode = ClientCertificateMode.AllowCertificate;
    httpsoptions.CheckCertificateRevocation = false;

    options.UseHttps(httpsoptions);
})
.UseUrls("http://0.0.0.0:5000", "https://0.0.0.0:5001")
.UseContentRoot(Directory.GetCurrentDirectory())
.UseStartup<Startup>()
.Build();
host.Run();
Run Code Online (Sandbox Code Playgroud)

我在Startup.cs中设置了一个单独的中间件处理程序来处理客户端证书的自定义验证.这段代码确实成功执行,在这个意义上一切正常.

问题是全局发生这种情况,我只想将客户端证书应用于特定的控制器和/或路由; 或者我真的会采取任何粒度.

通过创建两个虚拟目录,然后将SSL设置设置为接受,另一个设置为Ignore,本质上尝试创建可以在IIS中获得的相同类型的行为.带有Accept的那个将提示浏览器提供证书,而忽略的那个则不会.

我尝试将HttpsConnectionFilterOptions设置为仅指定ServerCertificate,希望不设置任何客户端证书相关选项将允许服务器在发送时接收客户端证书,否则不会提示浏览器.这似乎不起作用,因为我的中间件客户端证书处理程序在调用此函数时从未看到客户端证书(当ClientCertificateMode设置为AllowCertificate时它会这样做.

context.Connection.GetClientCertificateAsync();
Run Code Online (Sandbox Code Playgroud)

我想简而言之,Kestrel托管甚至允许更细粒度的客户端证书映射/处理,还是只能使用IIS?IIS不是此项目的选项,我宁愿不必为客户端cert api方面创建单独的项目/进程.感谢任何帮助!

c# asp.net-core-mvc kestrel-http-server asp.net-core

10
推荐指数
1
解决办法
1万
查看次数

使用 MapFallbackToController 端点在本地与 iis express &amp; kestrel 一起工作,在 IIS 上使用回退而不是更高优先级的路由

在从 .net core 2.2 切换到 3.0,然后在本地切换到 3.1 之后,我们切换到端点路由。我有以下路线:

app.UseEndpoints(endpoints =>
        {
            // Using this for asp.net core identity
            endpoints.MapRazorPages();
            // Mapping 2 routes, one private, one public but that we don't want localized so in both cases was simpler to create an area
            endpoints.MapAreaControllerRoute("Back", "Back", "back/{controller=Home}/{action=Index}/{id?}");
            endpoints.MapAreaControllerRoute("Photo", "Photo", "photo/{controller=Photo}/{action=Index}/{id?}");
            // The default mapping for our front office, this works just fine in iis express
            endpoints.MapControllerRoute("default", "{lang:lang}/{controller=Home}/{action=Index}/{id?}");
            // Fallback is used mainly to redirect you from / to /defaultlanguage
            endpoints.MapFallbackToController("WrongEndpoint","Home");
        }); …
Run Code Online (Sandbox Code Playgroud)

c# iis kestrel-http-server asp.net-core

10
推荐指数
0
解决办法
1119
查看次数