我已将 dotnet core 中间件配置为输出 Cache-Control 标头。我希望缓存所有静态内容,但最特别的是几个 .png 文件。缓存头没有被输出?我正在使用 dotnet core 1.1.1。
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
loggerFactory.AddConsole(this.Configuration.GetSection("Logging"));
loggerFactory.AddDebug();
app.UseStaticFiles(new StaticFileOptions
{
OnPrepareResponse = _ =>
{
var headers = _.Context.Request.GetTypedHeaders();
headers.CacheControl = new CacheControlHeaderValue
{
MaxAge = TimeSpan.FromHours(12)
};
}
});
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
app.UseBrowserLink();
}
else
{
app.UseExceptionHandler("/Home/Error");
}
app.UseIdentity();
// Add external authentication middleware below. To configure them please see http://go.microsoft.com/fwlink/?LinkID=532715
app.UseMvc(routes =>
{
routes.MapRoute(
"default",
"{controller=Site}/{action=Site}/{id?}");
});
} …Run Code Online (Sandbox Code Playgroud) c# asp.net-mvc asp.net-core-mvc kestrel-http-server asp.net-core
我有一个用 .NET Core 2.2.6 编写的控制台应用程序,它使用 Kestrel 来托管一个简单的 WebApi。
public class SettingsController : Controller
{
//
// GET: /settings/
public string Index()
{
return $"Hello world! controller";
}
}
Run Code Online (Sandbox Code Playgroud)
如果我发布代码并运行可执行文件,我可以访问http://127.0.0.1:310/settings并看到预期的“Hello world!控制器”。但是,如果我从 Visual Studio 2019 内部调试(甚至在发布模式下打开),相同的 URL 会引发 404 异常。
其他一些可能有助于查明问题的代码:
public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.ConfigureKestrel((context, options) =>
{
options.ListenAnyIP(310, listenOptions =>
{
listenOptions.Protocols = HttpProtocols.Http1;
});
})
.UseStartup<Startup>();
public class Startup
{
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc();
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{ …Run Code Online (Sandbox Code Playgroud) c# .net-core kestrel-http-server asp.net-core asp.net-core-webapi
我有两个带有普通 Web API 和 gRPC 服务的 .net 核心微服务(PatientService 和 AppointmentService)。我使用 gRPC 进行服务间通信,而不是使用 HTTP 调用。
预约服务依赖于患者服务的数据,这意味着当我点击预约服务的端点以获取预约时,我需要来自患者服务的患者信息,因此我使用 gRPC 进行此调用。
现在我的应用程序运行良好,我能够在两者之间进行通信,而无需在本地环境中使用 kestrel 做任何额外的事情。但是当我在 Docker 中运行相同的应用程序时,该应用程序没有运行,我无法访问 HTTP1 和 HTTp2 端口。我正在运行 Linux 容器。
我的问题是如何在 .net 核心应用程序中运行 HTTP1 和 HTTP2?如何使用grpc在.net微服务中进行服务间通信?
如何使用 Linux 容器(Ubuntu 18.04)在 docker 中运行 .net core web API + gRPC 服务?如何在没有 TLS 的情况下运行 gRPC?
请帮助我已经尝试了一切,但我被卡住了。我有这个重要的版本要发布。
Docker 文件。
#See https://aka.ms/containerfastmode to understand how Visual Studio uses this Dockerfile to build your images for faster debugging.
FROM mcr.microsoft.com/dotnet/core/aspnet:3.1-buster-slim AS base
RUN sed -i 's/DEFAULT@SECLEVEL=2/DEFAULT@SECLEVEL=1/g' /etc/ssl/openssl.cnf
RUN …Run Code Online (Sandbox Code Playgroud) .NET 6 中的“托管”机制已发生变化。以前IWebHost有IWebHost.ServerFeatures可用于获取IServerAddressFeature类似内容的属性(来自此 SO 答案):
IWebHost host = new WebHostBuilder()
.UseStartup<Startup>()
.UseUrls("http://*:0") // This enables binding to random port
.Build();
host.Start();
foreach(var address in host.ServerFeatures.Get<IServerAddressesFeature>().Addresses) {
var uri = new Uri(address);
var port = uri.Port;
Console.WriteLine($"Bound to port: {port}");
}
Run Code Online (Sandbox Code Playgroud)
现在在 .NET 6 中我有一个IHost. 如何获取端口(与 一致???):
public class Program {
public static void Main(string[] args) {
IHostBuilder hostBuilder = Host.CreateDefaultBuilder(args);
hostBuilder.ConfigureWebHostDefaults(webHostBuilder …Run Code Online (Sandbox Code Playgroud) 我正在尝试启动 ASP.NET 5 Web 应用程序,以便可以通过公共 Internet 地址访问它,例如“ http://hostname.dom ”。
我不希望通过“ http://www.hostname.dom ”、“ http://test.hostname.dom ”等访问它。我将 DNS 记录配置为通过“*”指向服务器的 IP 地址.hostname.dom”和“hostname.dom”名称。
所以我用参数启动 Kestrel:
server.urls=http://hostname.dom
Run Code Online (Sandbox Code Playgroud)
我希望它忽略任何不是“ http://hostname.dom ”的地址,但是每个“ http://justanything.hostname.dom ”都可以使用应用程序 ”地址甚至只是IP地址。因此,它正在侦听对 80 端口的所有请求,而不是对特定主机名的请求。例如,在配置 IIS 站点绑定时,您可以指定像“hostname.dom”这样的绑定,它会忽略任何其他可能的前缀,直到您明确指定它们。
Kestrel 是否支持 urls/hostnames,或者它只能侦听端口?
我是OS X的新手(使用我的新mac 4天了),我正在设置一个环境,我可以使用Visual Studio Code中内置的调试器在本地调试我的Asp.Net 5 Web项目,特别是获取附加到单声道时断点工作.
我按照这些说明安装了asp.net 5和visual studio代码.(http://docs.asp.net/en/latest/getting-started/installing-on-mac.html)
然后我安装了yeoman,并构建了一个aspnet项目.
我跑的命令dnu restore,dnu build和dnx web.
该项目在Kestrel本地运行localhost:5000就好了.我也可以通过VS Code调试器将它附加到mono.
当我尝试在C#代码中设置断点时出现问题.调试器不会命中它们.
在做了一些研究后,我发现我需要将Startup.cs文件指定为mono作为要调试的文件.(https://code.visualstudio.com/Docs/editor/debugging)
但运行后mcs -debug Startup.cs,我得到这些错误:
Startup.cs(5,17): error CS0234: The type or namespace name `AspNet' does not exist in the namespace `Microsoft'. Are you missing an assembly reference?
Startup.cs(6,17): error CS0234: The type or namespace name `AspNet' does not exist in the namespace `Microsoft'. Are you missing an assembly reference?
Startup.cs(7,17): error …Run Code Online (Sandbox Code Playgroud) macos mono visual-studio-code kestrel-http-server asp.net-core
我想连接到我的Kestrel服务器,其中托管的ASP.NET 5应用程序来自同一网络中的另一台PC.可能吗?我可以从cmd ping我的电脑,但当我尝试从网络浏览器连接时,我得到'连接超时'(我输入:"http:// {my_kestrel_ip}:5000 /").
我有一个WCF .dll从web.config文件加载配置.
我在asp.net 5应用程序中使用该dll,当我尝试从dll调用函数时,我遇到异常:
找不到在ServiceModel客户端配置部分引用合同'WebService.MyWebService'的默认端点元素.这可能是因为没有为您的应用程序找到配置文件,或者因为在客户端元素中找不到与此合同匹配的端点元素.
dll的配置存在于web.config中.
这曾经在asp.net beta 6中工作,但现在我升级到rc1它不起作用.
我怎样才能做到这一点?
我不太清楚Kestrel服务器是否需要加密为本地主机服务器的想法.
我使用Apache和HTTPS作为Kestrel服务器的代理服务器.是否还需要在Kestrel中运行https?理论上,通过Apache代理服务器(启用HTTPS)的内容应该加密,对吗?
如果您有任何想法,请详细说明.
asp.net-core ×7
c# ×5
.net-core ×2
asp.net-mvc ×2
grpc ×2
apache ×1
dns ×1
docker ×1
linux ×1
macos ×1
mono ×1
virtualhost ×1
wcf ×1