我正在尝试使用kestrel minimal server从控制台运行一个基本的Websharper项目,完全没有文档.我使用XSP运行Web项目,但我想用新的运行时测试它.
提前致谢.
我试图在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
我想启用现有的MVC控制器(来自ASP.NET Core/Kestrel服务器)将消息包装为JSONP,以便可以从浏览器跨域访问它们.我有什么选择?
我正面临着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) 我无法让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客户端收到的请求执行; 可能是因为它没有收到证书要检查...... …
在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
在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
我有一个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。
我基本上只是希望使连接更能容忍劣质的连接,而又不会在日常工作中为应用程序的其他方面带来太多麻烦。
Startup.Configure()),以使其仅应用于受影响的路由/ URL /操作。我正在尝试使用Nginx作为反向代理在Ubuntu服务器上托管ASP.Net Core MVC应用程序(启用https重定向)。我已经使用OpenSSL创建并安装了本地SSL证书。当我使用dotnet CLI运行应用程序时,它会同时监听http:// localhost:5000和https:// 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
我正在将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?
asp.net-core ×9
c# ×3
.net ×2
.net-core ×1
asp.net ×1
asp.net-mvc ×1
core ×1
f# ×1
iis ×1
iis-10 ×1
iis-7.5 ×1
iis-8 ×1
jsonp ×1
kestrel ×1
ssl ×1
ubuntu ×1
ubuntu-16.04 ×1
websharper ×1