这个标题太长了,但这是一个更孤立的问题:
为什么 ASP.NET Core Web 应用程序在从命令行启动时不提供静态 Web 资源并且ASPNETCORE_ENVIRONMENT未设置 或设置为除 之外的任何其他值"Development"?
语境
我使用 VS 2022 内置模板(.NET 6,但我不认为该问题/疑问是 .NET 5 特定的)创建了一个新的 ASP.NET Core Web 应用程序,我没有以任何方式更改创建的应用程序
我能够在 IIS Express 下运行我的 ASP.NET Core Web 应用程序,或者使用 Visual Studio在没有launchsettings.json.IIS Express 的情况下运行我的 ASP.NET Core Web 应用程序,基于,我的意思是使用绿色三角形下拉列表,然后选择 WebApplication 而不是 IIS Express
只是出于好奇,我尝试从 bin 文件夹启动 WebApplication1.exe。它开始,我可以使用 https://localhost:5001/ 通过浏览器访问它,页面加载,但没有 CSS、JS。我可以看到所有对静态资源的请求都有404响应。
我怀疑我应该以某种方式配置静态网络资源所在的应用程序。我看到相应的WebApplication1.runtimeconfig.json和WebApplication1.staticwebassets.runtime.json(以前的WebApplication1.staticwebassets.xml)在那里......但后来我发现神奇的ASPNETCORE_ENVIRONMENT是环境与该问题有关。
到目前为止我已经尝试过什么?
在命令 shell 中,我将环境变量设置为
SET ASPNETCORE_ENVIRONMENT=Development
Run Code Online (Sandbox Code Playgroud)
...然后开始,然后我启动了 WebApplication.exe,这种情况下一切正常,静态 Web 资源已提供服务。
问题
在非常简单的 …
我正在尝试从https://github.com/aspnet/home运行示例
我按照文档中的所有步骤操作,但我无法使其工作.
我正在运行dnx . kestrel(在CentOS上),错误是:
System.InvalidOperationException: Unable to load libuv. Make sure libuv is installed and available as libuv.so.1
at Microsoft.AspNet.Server.Kestrel.Networking.Libuv.Load (System.String dllToLoad) [0x00000] in <filename unknown>:0
at Microsoft.AspNet.Server.Kestrel.KestrelEngine..ctor (ILibraryManager libraryManager, IApplicationShutdown appShutdownService) [0x00000] in <filename unknown>:0
at Kestrel.ServerFactory.Start (IServerInformation serverInformation, System.Func`2 application) [0x00000] in <filename unknown>:0
at Microsoft.AspNet.Hosting.Internal.HostingEngine.Start () [0x00000] in <filename unknown>:0
Run Code Online (Sandbox Code Playgroud)
我libuv.so.1.0.0在/usr/local/lib
[/usr/local/lib]$ ls
libuv.a libuv.la libuv.so libuv.so.1 libuv.so.1.0.0 pkgconfig
Run Code Online (Sandbox Code Playgroud)
我还为libuv.so.1in /usr/lib和添加了符号链接/usr/lib64
我甚至检查了kestrel的源代码, …
beta8之前,它是可以启动一个Web应用程序,改变一些代码(例如关于-观的ViewBag.Message),保存并刷新浏览器-瞧,显示新的消息不重建项目.
现在,当使用使用DNX和Kestrel的beta8创建一个新的Web应用程序时,这似乎不再适用.知道为什么吗?
我在Linux系统上安装了ASP.NET Web应用程序,它运行良好,可以浏览所有内容。现在我想知道,是否有任何可能性或解决方法可以在Kestrel服务器上使用Windows身份验证方案?正如我在Google上搜索后看到的那样,目前不支持此功能。
感谢您的回答。
编辑:
但是Windows身份验证在Kestrel中不起作用,我能够通过在我的webb应用程序中实现NTLM身份验证的质询-响应协议来获取用户名。
基于https://loune.net/2009/09/ntlm-authentication-in-php-now-with-ntlmv2-hash-checking/
如何从 Kestrel 服务器设置 HTTP 状态描述?我想返回
HTTP/1.1 400 ArgumentException而不是HTTP/1.1 400 Bad Request但StatusDescription在 中找不到属性DefaultHttpResponse,我只能StatusCode用数字代码更改。
这是示例应用程序:
https://github.com/aspnet/KestrelHttpServer/tree/dev/samples/SampleApp
嗨,人们已经关注这个问题太久了,需要一些帮助。
我制作了一个 ASP.NET 核心网站,只是与 VS 2017 (v 1.1) 配套的模板而已。我使用 dotnet core cli 发布站点并使用此 dockerfile 构建图像:
FROM microsoft/dotnet:1.1-runtime
COPY /Publish /dotnetapp
WORKDIR /dotnetapp
EXPOSE 8444
ENTRYPOINT ["dotnet", "Inqu.dll"]
Run Code Online (Sandbox Code Playgroud)
当我运行创建的图像时:
docker run -it <image_name:tag> -p 8444:8444
Run Code Online (Sandbox Code Playgroud)
图像启动等待请求:
Hosting environment: Production
Content root path: /dotnetapp
Now listening on: http://*:8444
Application started. Press Ctrl+C to shut down.
Run Code Online (Sandbox Code Playgroud)
但是我无法访问该站点并在尝试访问该站点时收到 ERR_CONNECTION_REFUSED 认为http://local-ip:8444/
我已将 WebHostBuild 修改为:
var host = new WebHostBuilder()
.UseKestrel()
.UseUrls("http://*:8444")
.UseContentRoot(Directory.GetCurrentDirectory())
.UseStartup<Startup>()
.UseApplicationInsights()
.Build();
host.Run();
Run Code Online (Sandbox Code Playgroud)
所以它应该监听8444端口,我也试过设置:
ENV ASPNETCORE_URLS http://*:8444
Run Code Online (Sandbox Code Playgroud)
在 Dockerfile 中,但它没有帮助。
我在 …
我在哪里可以创建多个长时间运行的后台线程,Self Hosted Self Contained ASP.NET Core Microservice其生命周期与微服务生命周期相同?因此,从线程检索的信息可以作为对请求的响应发送.
尝试给定代码,但它在后台线程忙时减少了http请求性能.Program.cs文件的主要方法是:
static void Main(string[] args)
{
//Start background thread1
//Start background thread2
//Around 10 background threads
//Start host
var host = new WebHostBuilder()
.UseKestrel()
.UseUrls(ServerUrl)
.UseConfiguration(config)
.UseContentRoot(Directory.GetCurrentDirectory())
.UseIISIntegration()
.ConfigureServices(s => s.AddRouting())
.Configure(app => app.UseRouter(r => { (new Router()).Route(r); }))
.Build();
host.Run();
}
Run Code Online (Sandbox Code Playgroud)
线程以这种方式工作:
Thread t1 = new Thread(StartWork);
t1.IsBackground = true;
t1.Start();
public void StartWork()
{
while (ApplicationIsRunning)
{
//Get database info >> login into remote devices (SSH) >> get information …Run Code Online (Sandbox Code Playgroud) c# multithreading .net-core kestrel-http-server asp.net-core
我的茶k确实遇到了一个奇怪的问题。我无法上传超过茶est的MaxRequestBodySize的多个文件。
The expected behaviour is to throw the BadHttpRequestException when I am trying to reader this.Request.Form.Files.GetFiles(). I do expect to recieve request to controller action only once.
What is happening is that the upload action is hit a few time and browser with message "conection lost". I did not find a patter on how mamy times the action is called.
Controller action:
[HttpPost("upload")]
public IActionResult Upload()
{
try
{
var files = this.Request.Form.Files.GetFiles("files");
files.Select(async file => await this.SaveFile(file))
return …Run Code Online (Sandbox Code Playgroud) 我也尝试在我的网站上设置“让我们加密”。我在网上找到了很多解决方案,很遗憾,没有一个对我有用。
我在使用Apache 2和.NET Core 2.0的Debian 8.7。
我尝试将web.config(及其一些变体)放置在.well-known / acme-challenge文件夹中,以免碰运气。我在这些链接上尝试过解决方案(主要是添加web.config并添加一些代码):
https://github.com/ebekker/ACMESharp/issues/15
为letencrypt设置web.config-使用Asp.NET Core和Angular 2(Javascript-services)进行认证
我已经看到了,但这是一个已知的文件名,LE提供了随机文件名,因此我不知道如何实现它: asp.net core-如何在不扩展名的情况下提供静态文件
我知道我得到正确的URL并不是问题,就好像我将扩展名(例如.t)添加到文件中,然后将其添加到URL中一样,站点可以正确地返回文件。
这是acme-challenge中的web.config:
<?xml version = "1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<staticContent>
<mimeMap fileExtension=".*" mimeType="text/plain" />
</staticContent>
<handlers>
<clear />
<add name="StaticFile" path="*" verb="*" type="" modules="StaticFileModule,DefaultDocumentModule,DirectoryListingModule" scriptProcessor="" resourceType="Either" requireAccess="Read" allowPathInfo="false" preCondition="" responseBufferLimit="4194304" />
</handlers>
</system.webServer>
</configuration>
Run Code Online (Sandbox Code Playgroud)
这是整个web.config:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<system.webServer>
<handlers>
<add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModule" resourceType="Unspecified" />
</handlers>
<aspNetCore processPath="dotnet" arguments=".\my.site.dll" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" />
</system.webServer>
</configuration>
Run Code Online (Sandbox Code Playgroud)
这是添加到Configure()中的代码:
app.UseStaticFiles(new StaticFileOptions
{
FileProvider = new …Run Code Online (Sandbox Code Playgroud) 我的 ASP.NET Core 2.1 Web 应用程序在我的开发设置上完美运行。现在我想在生产中测试它。
\n\n生产服务器是Ubuntu 18。我按照说明进行操作。我还不想设置 nginx,只是做一些快速测试,说明如下:
\n\n\n\n\n“带有或不带有反向代理服务器的配置\xe2\x80\x94\xe2\x80\x94 都是 ASP.NET Core 2.0 或更高版本应用程序的有效且受支持的托管配置”。
\n
所以我构建并发布了我的项目:dotnet publish --configuration Release. \n然后在服务器上:
/var/www/myapp)sudo uwf allow 5000/tcp 80/tcpdotnet MyApp.dll(也尝试过sudo dotnet MyApp.dll)它运行时没有错误/警告,并表示它正在监听http://localhost:5000.
在我的本地计算机上,我尝试了http://serveripaddress(和http://serveripaddress:5000)但什么也没得到(“无法连接”)。我可以通过 ssh、sftp 等访问该服务器 - 只有 http 不起作用。
我究竟做错了什么?
\nasp.net ubuntu kestrel-http-server asp.net-core asp.net-core-2.1
asp.net-core ×8
c# ×4
.net-core ×3
.net ×1
asp.net ×1
asp.net-mvc ×1
centos ×1
dnx ×1
docker ×1
lets-encrypt ×1
libuv ×1
linux ×1
mono ×1
ubuntu ×1