标签: kestrel-http-server

如何使用.Net核心和来自OSX或Linux的Kestrel运行Websharper项目?

我正在尝试使用kestrel minimal server从控制台运行一个基本的Websharper项目,完全没有文档.我使用XSP运行Web项目,但我想用新的运行时测试它.

提前致谢.

.net f# core websharper kestrel-http-server

5
推荐指数
0
解决办法
352
查看次数

使用虚拟目录/应用程序在IIS中托管ASP.NET 5 WebAPI

我试图在IIS中托管一个新的ASP.NET 5 WebAPI项目,我正在使用ASP.NET 5 RC 1运行时.我正在使用的项目是新的ASP.NET 5 WebAPI项目的标准生成模板.(没有代码更改.)

我已经使用命令行成功发布了该项目,并且我可以使用特定端口(例如localhost:12345)使应用程序在新网站中工作.例如,访问localhost:12345/api/values将返回项目模板中的values.json数据.

但是,当我尝试为项目使用IIS Application文件夹时,我收到404错误.换句话说,localhost:12345/WebApi1/api/values返回404错误.但我可以看到Kestrel在事件查看器中的随机端口上运行,如果我访问该端口上的数据,我会返回values.json,所以我知道Kestrel正在运行.

是否需要执行一些特殊操作才能使ASP.NET 5 WebAPI项目在网站下的IIS Application文件夹中运行?

旁注:如果我使用--server.urls为Kestrel设置端口,它会在请求的端口和事件查看器中记录的随机端口上运行.(所以它实际上可以从2个URL的Kestrel获得,而不是由--server.urls配置的单个URL.)

iis-7.5 iis-8 asp.net-web-api2 kestrel-http-server asp.net-core

5
推荐指数
1
解决办法
2157
查看次数

带有JSONP的ASP.NET Core MVC

我想启用现有的MVC控制器(来自ASP.NET Core/Kestrel服务器)将消息包装为JSONP,以便可以从浏览器跨域访问它们.我有什么选择?

jsonp asp.net-core-mvc kestrel-http-server asp.net-core

5
推荐指数
1
解决办法
2323
查看次数

在IIS + Kestrel上托管Asp.NET Core:随机响应缓慢

我正面临着IIS + Kestrel托管asp.net核心应用程序(web api)的问题.

有时响应延迟约为5秒.在这种情况下,Chrome显示"GET net :: ERR_CONNECTION_TIMED_OUT"(但Firefox等待响应)

它只发生在IIS上,如果我在Visual Studio Code中本地运行它可以正常工作(至少我没有发现任何"冻结").

服务器端的应用程序日志中有一些信息.对于成功的请求,它看起来像:

info: Microsoft.AspNetCore.Hosting.Internal.WebHost[1]
      Request starting HTTP/1.1 OPTIONS http://
info: Microsoft.AspNetCore.Hosting.Internal.WebHost[2]
      Request finished in 0.2813ms 204 
info: Microsoft.AspNetCore.Hosting.Internal.WebHost[1]
      Request starting HTTP/1.1 GET http://
info: Microsoft.AspNetCore.Authentication.JwtBearer.JwtBearerMiddleware[2]
      Successfully validated the token.
info: Microsoft.AspNetCore.Authentication.JwtBearer.JwtBearerMiddleware[3]
      HttpContext.User merged via AutomaticAuthentication from authenticationScheme: Bearer.
info: Microsoft.AspNetCore.Authorization.DefaultAuthorizationService[1]
      Authorization was successful for user: admin.
info: Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker[1]
      Executing action method <method-name> with arguments <args> - ModelState is Valid
info: Microsoft.AspNetCore.Mvc.Internal.ObjectResultExecutor[1]
      Executing ObjectResult, writing value Microsoft.AspNetCore.Mvc.ControllerContext.
info: Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker[2]
      Executed action …
Run Code Online (Sandbox Code Playgroud)

iis iis-10 kestrel-http-server asp.net-core

5
推荐指数
0
解决办法
2720
查看次数

HttpClient不使用.NET Core在Windows上发送客户端证书

我无法让HttpClient类在Windows上使用.NET Core发送客户端证书.

这是我正在使用的代码:

X509Certificate2 certificate = new X509Certificate2(@"C:\Repos\selly\client1.pfx", "password");
HttpClientHandler handler = new HttpClientHandler();
handler.ClientCertificateOptions = ClientCertificateOption.Manual;
handler.ServerCertificateCustomValidationCallback = (a,b,c,d) => { return true; };
handler.ClientCertificates.Add(certificate);

HttpClient client = new HttpClient(handler);
var content = new StringContent("");
content.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue("application/json");
client.PostAsync("https://client2:5002/api/values", content).Wait();
Run Code Online (Sandbox Code Playgroud)

代码在Linux(Ubuntu 16.04)上按预期工作(显然,证书路径已更改).它不适用于Windows.

查看Wireshark中的交换,客户端在Windows上运行时不会发送证书(10 v1703).

我使用.NET Framework运行类似的代码(使用'WebRequestHandler'而不是'HttpClientHandler').它正确发送客户端证书.

我在网上找到了以下内容,但与此处描述的问题不同,执行了服务器证书回调.我自己生成了证书,但它们都是由根CA签署的(它安装在客户端和服务器上)并且所有细节都是正确的.

我也发现了这一点,这表明客户端证书可以在Windows上的.NET Core上使用HttpClient.

我也尝试过显式设置TLS版本,但问题仍然存在.

我使用Kestrel作为Web服务器.它配置如下:

.UseKestrel(options =>
{
    var sslOps = new HttpsConnectionFilterOptions();
    sslOps.ClientCertificateMode = ClientCertificateMode.RequireCertificate;
    sslOps.ClientCertificateValidation = CheckClientCertificateLogic.CheckClientCertificate;
    sslOps.ServerCertificate = new X509Certificate2(@"C:\Repos\selly\client2.pfx", "password");
    options.UseHttps(sslOps);
})
Run Code Online (Sandbox Code Playgroud)

"ClientCertificateValidation"回调不会对从Windows客户端收到的请求执行; 可能是因为它没有收到证书要检查...... …

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

5
推荐指数
1
解决办法
2661
查看次数

无法覆盖ASPNET核心中的Kestrel RequestSizeLimit

在asp.net核心2中,添加了一个重大更改,将请求大小限制为30 mb()。

在该文章中,如果您想推翻30 mb的限制,则提供了一种解决方案。应该通过向操作添加属性来完成此操作,如下所示:

[HttpPost]
[RequestSizeLimit(100_000_000)]
public IActionResult MyAction([FromBody] MyViewModel data)
{
Run Code Online (Sandbox Code Playgroud)

当我这样做并重建项目时,在Kestrel中仍然出现以下错误:

 An unhandled exception has occurred while executing the request
Microsoft.AspNetCore.Server.Kestrel.Core.BadHttpRequestException: Request body too large.
   at Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http.Frame.ThrowRequestRejected(RequestRejectionReason reason)
   at Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http.MessageBody.ForContentLength.OnReadStart()
   at Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http.MessageBody.TryInit()
   at Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http.MessageBody.<ReadAsync>d__22.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter`1.GetResult()
   at Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http.FrameRequestStream.<ReadAsyncInternal>d__21.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter`1.GetResult() …
Run Code Online (Sandbox Code Playgroud)

kestrel-http-server asp.net-core asp.net-core-2.0 asp.net-core-mvc-2.0

5
推荐指数
0
解决办法
2028
查看次数

在Windows上使ASP.NET Core服务器(Kestrel)区分大小写

在Linux容器中运行的ASP.NET Core应用程序使用区分大小写的文件系统,这意味着CSS和JS文件引用必须区分大小写。

但是,Windows文件系统不区分大小写。因此,在开发过程中,您可以使用不正确的大小写引用CSS和JS文件,但是它们可以正常工作。因此,您不会在Windows上进行开发时就知道在Linux服务器上运行您的应用程序时会中断。

无论如何,是否可以使Windows上的Kestrel区分大小写,以便我们能够拥有一致的行为并在投入使用之前找到参考错误?

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

5
推荐指数
2
解决办法
1090
查看次数

BadHttpRequestException由于MinRequestBodyDataRate和连接不良

我有一个ASP.NET Core Web应用程序,该应用程序接受经过身份验证的用户上传的文件,并带有一些错误处理,以在发生异常时通知我(Exceptional)。我的问题是,BadHttpRequestException由于用户在覆盖范围不可靠的区域通过移动设备访问应用程序,因此会定期收到的警报。我以前也使用2.0来获得此功能,但是直到异常描述在2.1中进行了更新,我才知道它与明确相关MinRequestBodyDataRate,或者它是可配置的。我用以下命令设置了默认值(240字节,超过5秒钟)

public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
        WebHost.CreateDefaultBuilder(args)
            .UseKestrel(options =>
            {
                options.Limits.MinRequestBodyDataRate = new MinDataRate(240.0, TimeSpan.FromSeconds(10.0));
            }) 
            .UseStartup<Startup>();
Run Code Online (Sandbox Code Playgroud)

这使等待客户端/浏览器的时间延长了一倍,但是我仍然收到错误警报。我无法控制用户的不满意,但是我仍然希望尝试找到一种减轻错误的方法。我可以进一步扩展最小值,但是如果可能的话,我不想在整个应用程序中都这样做。理想情况下,应该是处理上传的特定路线/操作。我能够找到的文档指示可以使用进行配置IHttpMinRequestBodyDataRateFeature。我曾考虑将其放入动作中,但直到模型绑定将整个文件上载以将其绑定到我的参数之前,我什至都不认为该动作被调用。

public async Task<IActionResult> Upload(IFormFile file)
{
    var minRequestBodyDataRateFeature = HttpContext.Features.Get<IHttpMinRequestBodyDataRateFeature>();
    minRequestBodyDataRateFeature.MinDataRate = new MinDataRate(240, TimeSpan.FromSeconds(30));
    myDocumentService.SaveFile(file);
}
Run Code Online (Sandbox Code Playgroud)

我以前已经实现了分块上传,并且仅在最后一个块到来时才将文件保存到服务/数据库中(此文件在它们之间的临时位置逐步构建),从而在一定程度上缓解了这种情况。但是BadHttpRequestException即使通过进行了延长的时间,我仍然会得到这些s CreateWebHostBuilder(未显示块,因为它不相关)。

我认为最好的选择可能是尝试将其连接到设置中间件的configure方法中,但是我不确定将其仅应用于一项操作的最佳方法。网址?我想知道如果我将最小费率设置为完全禁用最小费率会有什么影响null

我基本上只是希望使连接更能容忍劣质的连接,而又不会在日常工作中为应用程序的其他方面带来太多麻烦。

  1. 我需要一种方法来应用更改(可能在中间件中Startup.Configure()),以使其仅应用于受影响的路由/ URL /操作。
  2. 对于该路由/网址/操作,如果我完全禁用它(而不是放大它),是否有需要考虑的含义?整个申请?
  3. 如果没有任何解决办法,那么简单地忽略这些错误并永不记录它们是否安全?我是否为与应用程序/服务器的恶意交互创建了一个盲点?

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

5
推荐指数
1
解决办法
2558
查看次数

ASP.Net Core应用程序服务仅在Ubuntu上侦听Port 5000

我正在尝试使用Nginx作为反向代理在Ubuntu服务器上托管ASP.Net Core MVC应用程序(启用https重定向)。我已经使用OpenSSL创建并安装了本地SSL证书。当我使用dotnet CLI运行应用程序时,它会同时监听http:// localhost:5000https:// localhost:5001,并且我能够使用https在网络上访问它(Nginx将HTTP请求重定向到https) 。

问题是当我尝试以服务形式运行时,它仅在http:// localhost:5000上进行侦听。

这是* .service文件:

[Unit]
Description=Test ASP.Net core web application service.

[Service]
WorkingDirectory=/home/ubuntu/MyAppFolder
ExecStart=/usr/bin/dotnet/home/ubuntu/MyAppFolder/MyApplication.dll
Restart=always
# Restart service after 10 seconds if the dotnet service crashes:
RestartSec=10
SyslogIdentifier=MyApplication
User=www-data
Environment=ASPNETCORE_ENVIRONMENT=Development
Environment=DOTNET_PRINT_TELEMETRY_MESSAGE=false
Environment=ASPNETCORE_HTTPS_PORT=5001
Environment=ASPNETCORE_URLS=http://localhost:5000;https://localhost:5001

[Install]
WantedBy=multi-user.target
Run Code Online (Sandbox Code Playgroud)

环境详细信息:ASP.Net Core 2.1.1,ASP.Net Core SDK 2.1.3,Nginx 1.14,Ubuntu 16.04

ubuntu ssl kestrel-http-server asp.net-core ubuntu-16.04

5
推荐指数
1
解决办法
2105
查看次数

Asp.net Core RequestSizeLimit仍执行操作

我正在将ASP.net Core 2.0与MVC一起使用。我有一个控制器动作,我想将请求大小限制为1MB。我RequestSizeLimit像这样添加了属性:

[HttpPost]
[Authorize]
[RequestSizeLimit(1_000_000)]
public async Task<List<ResourceUploadResult>> Upload([FromBody]List<Resource> updatedList){
    //....
}
Run Code Online (Sandbox Code Playgroud)

上载<1MB时,可以正常工作。当它大于1MB时,我希望服务器返回状态413,但是,该updatedList参数为null且该操作正常执行,NullReferenceException尝试迭代该列表时遇到a 。

有没有办法告诉Kestrel在达到大小限制时返回413?

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

5
推荐指数
1
解决办法
294
查看次数