我正在尝试将我的ASP.NET 5 WebApi部署到远程服务器(Windows Server 2008 R2),并且无法使其与IIS一起正常运行.
project.json
{
"webroot": "wwwroot",
"version": "1.0.0-*",
"dependencies": {
"App.Data": "1.0.0-*",
"App.Model": "1.0.0-*",
"App.Repository": "1.0.0-*",
"App.ViewModel": "1.0.0-*",
"AutoMapper": "4.1.1",
"Microsoft.AspNet.Authentication": "1.0.0-rc2-16009",
"Microsoft.AspNet.Authentication.JwtBearer": "1.0.0-rc2-16009",
"Microsoft.AspNet.Diagnostics": "1.0.0-rc2-16136",
"Microsoft.AspNet.IISPlatformHandler": "1.0.0-rc2-15873",
"Microsoft.AspNet.Mvc": "6.0.0-rc2-16377",
"Microsoft.AspNet.Server.Kestrel": "1.0.0-rc2-16017",
"Microsoft.AspNet.Server.WebListener": "1.0.0-rc2-15932",
"Microsoft.AspNet.StaticFiles": "1.0.0-rc2-15916",
"Microsoft.Framework.Configuration.Json": "1.0.0-rc1-15666",
"Microsoft.Framework.Logging": "1.0.0-rc1-15644",
"Microsoft.Framework.Logging.Console": "1.0.0-rc1-15644",
"Microsoft.IdentityModel.Protocols.OpenIdConnect": "2.0.0-rc1-211120828"
},
"commands": {
"kestrel": "Microsoft.AspNet.Server.Kestrel",
"web": "Microsoft.AspNet.Server.Kestrel"
},
"frameworks": {
"dnx451": { }
},
"exclude": [
"wwwroot",
"node_modules"
],
"publishExclude": [
"**.user",
"**.vspscc"
]
}
Run Code Online (Sandbox Code Playgroud)
当我尝试从浏览器访问应用程序时,我得不到任何回复.当我web.cmd在服务器上执行时,我收到以下错误:
Error: Unable to load …Run Code Online (Sandbox Code Playgroud) 我在Windows工作,想在Windows上构建一个dotnet核心应用程序,以便在Linux上运行.在build文件夹中,我看到已发布文件夹中的.DLL文件引用,这显然不适用于Linux - 如何从我的Windows环境编译应用程序以在Linux上运行?可能吗?
在project.json文件中指定了运行时版本,我认为这与C:\ Program Files\dotnet\sdk\1.0.0-preview2-003121\runtimes位置中的运行时相关联?如果是这样,我如何在Windows中安装Linux运行时并引用它?
linux windows cross-compiling kestrel-http-server asp.net-core-1.0
我有一个规范代码,可以在任务中自行托管一个asp.net mvc应用程序:
Task hostingtask = Task.Factory.StartNew(() =>
{
Console.WriteLine("hosting ffoqsi");
IWebHost host = new WebHostBuilder()
.UseKestrel()
.UseContentRoot(Directory.GetCurrentDirectory())
.UseIISIntegration()
.UseStartup<Startup>()
.UseApplicationInsights()
.Build();
host.Run();
}, canceltoken);
Run Code Online (Sandbox Code Playgroud)
当我取消此任务时,将抛出ObjectDisposedException.我怎样才能优雅地关闭主人?
在我的asp.net核心应用程序(角4前端)我接受这样的URL:
example.com/report;url=http%3A%2F%2Fexample2.com
Run Code Online (Sandbox Code Playgroud)
我想创建一个允许人们输入以下网址的重写规则:
example.com/report;url=http://example2.com
Run Code Online (Sandbox Code Playgroud)
我无法找到如何做到这一点.
我试过了:
var options = new RewriteOptions()
.AddRewrite(@"(.*);url=http:\/\/([^;]*)(.*)", "$1;url=http%3A%2F%2F$2$3", skipRemainingRules: false)
.AddRewrite(@"^report.*", "index.html", skipRemainingRules: true)
app.UseRewriter(options);
Run Code Online (Sandbox Code Playgroud)
这不起作用,但即使这样做也不会解释在域之后有斜杠的URL,即子目录.使用组匹配模式我认为不可能这样做.它必须是匹配组上的查找和替换类型操作.
其他Web服务器将此作为解码斜杠的可配置选项.我在asp.net核心文档中找不到任何引用.这可能吗?
我按照本教程编写了我的第一个ASP.NET Core 2.0 Web REST API应用程序.但是我的具体问题是关于在VS2017中创建标准ASP.NET核心Web应用程序时在Program.cs文件中获得的代码,它与此处描述的代码相同:
using Microsoft.AspNetCore;
using Microsoft.AspNetCore.Hosting;
namespace WebApplication5
{
public class Program
{
public static void Main(string[] args)
{
BuildWebHost(args).Run();
}
public static IWebHost BuildWebHost(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseStartup<Startup>()
.Build();
}
}
Run Code Online (Sandbox Code Playgroud)
我有我的应用程序工作正常,当我在VS2017调试,所以接下来我做的步骤是按使它成为一个独立的应用程序本教程,它工作正常,并给了我一个可执行文件,我可以运行(我是在Windows 10 64) .
现在的问题是这个可执行文件在端口5000上启动了web服务器,但是我希望能够通过命令行参数配置监听URL.
通过上面的代码来看,我们可以看到,args传递给WebHost.CreateDefaultBuilder(args),所以我假设的任何命令行参数通过此功能解释,但我想不出我有什么在命令行上传递,以获取服务器听另一个港口.
我尝试了以下选项:
- MyApp.exe --UseUrls="http://*:5001"
- MyApp.exe --UseUrls=http://*:5001
- MyApp.exe --server.urls=http://*:5001
-MyApp.exe urls="http://*:5001"
以及其他各种组合......应用程序启动但只能在端口5000上进行监听.
我开始认为我正在尝试一些不可能的事情:)所以它真的不可能或者我错过了什么吗?
如何从 Linux docker 容器中更改可用于 OpenSSL/Kestrel 的可用密码套件?
首先,让我们从一些环境细节开始:
我的 Program.cs 看起来像这样,它设置了 kestrel:
builder.UseKestrel(o => o.UseHttps(new HttpsConnectionFilterOptions
{
SslProtocols = SslProtocols.Tls12 | SslProtocols.Tls11,
CheckCertificateRevocation = true,
ClientCertificateMode = ClientCertificateMode.AllowCertificate
ServerCertificate = new X509Certificate2(certificate.Pfx, certificate.Password)
}))
.UseUrls(bindTo);
Run Code Online (Sandbox Code Playgroud)
关键是这样的:
SslProtocols = SslProtocols.Tls12 | SslProtocols.Tls11,
Run Code Online (Sandbox Code Playgroud)
无论我在这里设置什么值(Tls12、Tls11、Tls 或这些值的任何子集),它似乎都不会对连接可用的密码套件产生影响。我正在查看我的 URL 的 sslLabs 报告,由于旧协议上的 …
我有一个运行SignalR核心集线器的.Net Core 2.0 C#Web Api.我甚至无法启动()我的hubConnection从angular(5.0.1)收到此错误:
选项https:// localhost:44301/hubs/sample 405(方法不允许)
错误:无法启动连接.错误:方法不允许
建立连接时出错:(
XHR加载失败:OPTIONS" https:// localhost:44301/hubs/sample ".
HttpError:XMLHttpRequest.xhr.onload不允许的方法[as __zone_symbol__ON_PROPERTYload](webpack-internal:///../../../../@aspnet/signalr-client/dist/src/HttpClient.js: 30:28)在ZoneDelegate.invokeTask(webpack-internal)的XMLHttpRequest.wrapFn(webpack-internal:///../../../../zone.js/dist/zone.js:1166:39) :///../../../../zone.js/dist/zone.js:425:31)在Object.onInvokeTask(webpack-internal:///../../ .. /core/esm5/core.js:4816:33)在ZoneDelegate.invokeTask(webpack-internal:///../../../../zone.js/dist/zone.js:424:36 )在Zone.runTask(webpack-internal:///../../../../zone.js/dist/zone.js:192:47)的ZoneTask.invokeTask [作为调用](webpack-)内部:///../../../../zone.js/dist/zone.js:499:34)在invokeTask(webpack-internal:///../../../) ../zone.js/dist/zone.js:1540:14)在XMLHttpRequest.globalZoneAwareCallback(webpack-internal:///../../../../zone.js/dist/zone.js :1566:17)
我正在努力甚至调试这个问题,即使在小提琴手的帮助下我也无法解决它.它似乎不是我的Api的问题,因为Kestrel控制台打印出来到集线器的请求进来,但不会打印任何错误.而且我可以毫无问题地获取,发送和发布到我的控制器.
这是我的StartUp.cs配置(我省略了与简洁无关的代码)
public void ConfigureServices(IServiceCollection services)
{
services.AddCors(options =>
{
options.AddPolicy(
"CorsPolicy",
builder =>
builder
.AllowAnyOrigin()
.AllowAnyHeader()
.AllowAnyMethod()
.AllowCredentials()
);
});
services.AddAuthentication();
services.AddMvcCore()
.AddAuthorization(options => {...});
services.AddAuthentication("Bearer")
.AddIdentityServerAuthentication(options => {...});
services.AddSignalR();
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
app.UseCors("CorsPolicy");
app.UseAuthentication();
app.UseSignalR(routes =>
{
routes.MapHub<SampleHub>("/hubs/sample");
});
app.UseMvc();
}
Run Code Online (Sandbox Code Playgroud)
这是我的示例中心
public interface ISampleHubClient
{
Task receiveMessage(SampleRequest …Run Code Online (Sandbox Code Playgroud) typescript kestrel-http-server asp.net-core-2.0 angular asp.net-core-signalr
我有一个相对较新的ASP.NET Core 2站点.它只在一台服务器上运行(Windows Server 2012 R2,IIS 8.5),每上几天我上传更新时只会重启一次.大约每天一次,由于防伪系统的拒绝,用户的请求失败.这些是POST请求,并没有什么特别之处.我在POST请求中包含了防伪值,99%的时间,POST请求都有效.但是当它们没有时,stdout日志会说,"防伪令牌验证失败.防伪cookie令牌和请求令牌不匹配." 当我使用该确切语句执行Web搜索时,我得到零结果.所以我转向Stack Overflow.[这已不再适用,因为Web搜索现在会产生此Stack Overflow问题.]
我已经在下面列出了stdout日志的相关部分.
info: Microsoft.AspNetCore.Hosting.Internal.WebHost[1]
Request starting HTTP/1.1 POST [domain redacted] application/x-www-form-urlencoded 234
info: Microsoft.AspNetCore.Mvc.ViewFeatures.Internal.ValidateAntiforgeryTokenAuthorizationFilter[1]
Antiforgery token validation failed. The antiforgery cookie token and request token do not match.
Microsoft.AspNetCore.Antiforgery.AntiforgeryValidationException: The antiforgery cookie token and request token do not match.
at Microsoft.AspNetCore.Antiforgery.Internal.DefaultAntiforgery.ValidateTokens(HttpContext httpContext, AntiforgeryTokenSet antiforgeryTokenSet)
at Microsoft.AspNetCore.Antiforgery.Internal.DefaultAntiforgery.<ValidateRequestAsync>d__9.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 Microsoft.AspNetCore.Mvc.ViewFeatures.Internal.ValidateAntiforgeryTokenAuthorizationFilter.<OnAuthorizationAsync>d__3.MoveNext()
info: Microsoft.AspNetCore.Mvc.RazorPages.Internal.PageActionInvoker[3]
Authorization …Run Code Online (Sandbox Code Playgroud) 最近我将我的代码库从.net core 1.0迁移到了2.0.之后,我收到错误"服务器在随机使用System.Net.Http.HttpClient时返回了无效或无法识别的响应错误".我在100个请求中的2个中收到此错误.
另外如何调试这个,因为它是随机发生的:(
Program.cs中
public class Program
{
public static void Main(string[] args)
{
var config = new ConfigurationBuilder()
.AddJsonFile(Path.Combine(Directory.GetCurrentDirectory(),"hosting.json"), optional: false)
.Build();
var useHttps = false;
bool.TryParse(config !=null ? config["useHttps"] : "false", out useHttps);
IWebHost host = null;
if (useHttps)
{
var fileInfo = new FileInfo(config["certName"]);
X509Certificate2 cert = new X509Certificate2(fileInfo.FullName, config["certPwd"]);
host = new WebHostBuilder()
.UseContentRoot(Directory.GetCurrentDirectory())
.UseStartup<Startup>()
.UseKestrel(options =>
{
options.Listen(IPAddress.Loopback, 5000);
options.Listen(IPAddress.Any, 4430, listenOptions =>
{
listenOptions.UseHttps(cert);
});
})
.UseIISIntegration()
.Build();
} …Run Code Online (Sandbox Code Playgroud) httpclient kestrel kestrel-http-server asp.net-core-2.0 .net-core-2.0
我打开命令行并使用dotnet run命令运行我的应用程序。这将启动Kestrel并启动我的应用程序。
我应该如何确定将调试器附加到哪个进程,以便可以调试Kestrel现在托管的网站?
我特别需要能够以这种方式进行操作-意味着我不能使用标准F5。
asp.net-core ×7
c# ×4
iis ×2
angular ×1
csrf ×1
docker ×1
httpclient ×1
kestrel ×1
linux ×1
openssl ×1
typescript ×1
windows ×1