我遇到了包含"危险字符"作为Web API URL一部分的请求的问题.Url包含一个正确的Url编码的&,但仍会导致请求验证ASP.NET错误.
与MVC不同,似乎没有[ValidateInput(false)]属性来强制和禁用此功能.
在ASP.NET Core 2.0中,.UseAuthentication()中间件有一个重大更改,不再允许此处提到的旧语法工作.
新版本似乎在addAuthentication中处理配置,但我无法在任何地方找到有关如何更改指定自定义登录和注销URL的旧代码的任何详细信息.
services.AddAuthentication(o =>
{
// Where can I specify this?????
var opt = new CookieAuthenticationOptions()
{
LoginPath = "/api/login",
LogoutPath = "/api/logout",
};
o.DefaultSignInScheme = CookieAuthenticationDefaults.AuthenticationScheme;
o.DefaultAuthenticateScheme = CookieAuthenticationDefaults.AuthenticationScheme;
});
Run Code Online (Sandbox Code Playgroud)
任何帮助,将不胜感激...
在Windows 8上运行,我已从IIS的Windows功能安装选项启用了IIS 的应用程序初始化功能.
我正在尝试让ASP.NET Web应用程序立即启动,并在重新启动应用程序池时触发Application_Start.我已按照本教程中的说明进行操作,但在ApplicationHost.config和web.config中设置值后,我发现没有任何内容正在触发.
这是我设置的内容(这似乎与文章建议的内容相符):
<applicationPools>
<add name="MPress" autoStart="true"
enable32BitAppOnWin64="true"
startMode="AlwaysRunning">
<processModel identityType="LocalSystem" setProfileEnvironment="true" />
</applicationPools>
<sites>
<site>
<application path="/MPress.Workflow.WebQueueMessageManager"
applicationPool="MPress" preloadEnabled="true">
<virtualDirectory path="/" physicalPath="C:\Projects2010\Clients\MPress\MarvelPress.Workflow.WebQueueMessageManager" />
</application>
<bindings>
<binding protocol="http" bindingInformation="*:80:" />
</bindings>
</site>
</sites>
Run Code Online (Sandbox Code Playgroud)
然后在本地web.config我有:
<system.webServer>
<applicationInitialization remapManagedRequestsTo="Startup.htm"
skipManagedModules="true"
doAppInitAfterRestart="true">
<add initializationPage="default.aspx" />
</applicationInitialization>
</system.webServer>
Run Code Online (Sandbox Code Playgroud)
除了指向我的虚拟应用程序和应用程序池之外,这与doAppInitAfterRestart标志不同,这与上面文章中的设置完全匹配.
似乎应用程序池自动加载工作 - 如果我停止并重新启动IIS w3wp,我看到应用程序池显示在任务列表中.但是使用Process Explorer我可以看到EXE还没有加载.NET就坐在那里.没有加载.NET运行时dll,因此似乎没有触发任何请求.
真正糟糕的是,没有关于每个设置所需的部分和期望值的真实文档.我无法找到doAppInitAfterRestart标志.我也把结果留下了同样的结果.我也不是100%URL的语法.MSDN文章指向"/default.aspx",我也试过这个也无济于事.
我还在IIS中启用了失败请求跟踪,以查看假请求是否可能以某种方式失败,但没有任何内容显示在那里.当应用程序池重新启动时,它看起来似乎没有触发站点级别加载.
此处提到的所有设置也可以通过Windows 8中的IIS Admin UI获得,一切看起来都是正确的.
我不知道还有什么要检查或者我可能缺少什么.任何想法都赞赏.
cdSo我正在尝试将我的一些Angular 5代码迁移到6,并且我理解rxjs使用.pipe()运算符所需的大多数更改.它的工作方式与"pipable"操作一样.
但是,行为catchError()
与.catch()
运营商不同.在rxjs 6之前,我使用.catch()
运算符将错误输入转换为一个一致的错误对象,然后可以在`.subscribe()中捕获.
getAlbums(): Observable<Album[]> {
return this.httpClient.get<Album[]>(this.config.urls.url("albums"))
.map(albumList => this.albumList = albumList)
.catch(new ErrorInfo().parseObservableResponseError);
}
Run Code Online (Sandbox Code Playgroud)
new ErrorInfo().parseObservableResponseError
是一个函数,它将一个错误对象作为输入,并将输入错误解析为一个带有规范化对象的简单错误对象.捕获返回Observable<any>
:
parseObservableResponseError(response): Observable<any> {
let err = new ErrorInfo();
...
return Observable.throw(err);
}
Run Code Online (Sandbox Code Playgroud)
这对于轻松处理rxjs5错误非常有用 - 错误基本上被捕获为管道的一部分,然后抛出一个众所周知的错误结构,可以捕获.subscribe()
错误函数.
然后将相同的代码移动到rxjs 6并使用.pipe()
我尝试执行以下操作:
getAlbums(): Observable<Album[]> {
return this.httpClient.get<Album[]>(this.config.urls.url("albums"))
.pipe(
map(albumList => this.albumList = albumList),
catchError(new ErrorInfo().parseObservableResponseError)
);
}
Run Code Online (Sandbox Code Playgroud)
但是这不起作用,因为catchError现在将结果返回Observable<any>
到管道中,这不是我想要的.从本质上讲,我只想像以前一样重新抛出任何错误.
错误TS2322:输入'Observable <{} | 专辑[]>'不能分配给'Observable'类型
如何模拟旧的操作员.catch()
行为?
更新:
经过多次讨论后,显示的代码刚开始工作而没有给我一个构建错误.老实说,我不知道为什么它之前的错误消息失败了,但现在正在工作.@cartant在评论中的建议是指定结果的明确方式,也是有效的.
我遇到了WCF REST服务的问题.我明白了:
无法从程序集'System.ServiceModel,Version = 3.0.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089'加载类型'System.ServiceModel.Activation.HttpHandler'.
在ASP.NET 4.0 AppPool中运行IIS时.
只有在以下情况下才会出现问题:
在卡西尼号中运行 - 没问题,它可以正常运行.与ASP.NET兼容性运行 - 没问题,它的工作原理.
它似乎是某种处理程序版本冲突试图实例化错误版本的处理程序,而该处理程序反过来试图加载旧版本的System.ServiceModel,但我无法追踪它.
任何人之前都看过这样的事情并有任何想法如何进一步追踪这个?
我查看了ApplicationHost.config和System.ServiceModel和HttpHandler引用的主web.config文件,但没有运气.那里.
+++瑞克---
在我的开发机器上,每当我将IIS应用程序池设置为以32位模式运行时,任何启动的Web应用程序都将挂起.在浏览器中访问时,应用程序将"挂起"大约5-10秒,然后才会收到503错误.应用程序的应用程序池将在此时停止,并且必须显式重新启动.
在64位(默认)模式下,一切都很好,但是每当池切换到32位时,它甚至会立即挂在新的网站中的静态页面上.
当以32位模式发布到我的实时服务器时,相同的应用程序运行正常,因此看起来这是某种配置问题.我启用了失败的请求跟踪,但日志中没有显示任何内容.
由于一些旧的COM依赖项,我有几个必须运行32位的应用程序,但我无法让服务器运行.
什么可能导致这个问题?
我有一组用来自远程系统的TripleDES编码的加密文档.我需要解码C#中的数据,我无法控制密钥或编码算法.我所拥有的只是密钥和模式(CBC)以及位于文件中的数据.
TripleDESCryptoServiceProvider很容易使用,但我无法弄清楚如何在没有初始化向量的情况下使用Decryptor.
我们有一个24字节(192位)密钥可以解密,但没有别的.
string key = "1468697320656E6372797174696F6E206973737265206933";
byte[] keyData = ParseHex(key); // key is OK at 24 bytes
TripleDESCryptoServiceProvider des = new TripleDESCryptoServiceProvider();
des.Mode = CipherMode.CBC;
des.GenerateIV();
var decryptor = des.CreateDecryptor(keyData,null); // des.IV
var encoded = File.ReadAllBytes(@"..\..\..\..\test.tdes");
byte[] output = decryptor.TransformFinalBlock(encoded, 0, encoded.Length);
Run Code Online (Sandbox Code Playgroud)
这与错误的数据完全失败.如果我切换到TransformBlock,代码至少会运行但只产生乱码:
byte[] output = new byte[10000];
var count = decryptor.TransformBlock(encoded, 0, encoded.Length, output, 0);
Run Code Online (Sandbox Code Playgroud)
所以问题是:
事实证明,解码问题不是由丢失的初始化向量引起的,而是由加密数据提供者的错误信息引起的.更新的工作代码如下所示:
// Read the test data
byte[] encoded = File.ReadAllBytes(@"..\..\..\..\test.tdes");
// Get the key into …
Run Code Online (Sandbox Code Playgroud) 我有一个应用程序,它使用存储在单个数据库中的两个单独的模型.第一个模型使用迁移进行设置,并且是在数据库中创建迁移数据的模型.第二个是一个非常简单的模型,根本不需要模型验证 - 它使用的表存在且具有适当的结构.第二个Context在具有相同表结构的单独数据库中正常工作.
问题是它在与第一个模型在同一个数据库中运行时失败,因为它确实提供了某种模型验证.它抱怨自上次更新以来上下文已发生变化,但当然迁移数据不包含有关第二个上下文表的任何内容.
是否可以关闭上下文的元数据验证,并让第二个上下文按原样对表进行操作,因为我知道它有效吗?
在上下文构造函数中,但没有任何效果.
我需要在非托管进程中托管.NET运行时.我有通过COM加载运行时的代码,我可以将程序集加载到AppDomain并执行代码就好了.
但是,我遇到了托管在网络共享上的应用程序的问题,并且必须更改应用程序策略才能让它们执行而不是一个选项.所以我想要做的是将运行时的主AppDomain的权限级别设置为不受限制.
有人可以举例说明如何设置AppDomain策略级别吗?我无法弄清楚如何从非托管代码实例化所需的类来创建PolicyLevel和相关对象并设置策略.基本上我不知道我需要从我使用的C++代码中使用什么包含/命名空间引用.
这是我此时的代码:
/// Starts up the CLR and creates a Default AppDomain
DWORD WINAPI ClrLoad(char *ErrorMessage, DWORD *dwErrorSize)
{
if (spDefAppDomain)
return 1;
//Retrieve a pointer to the ICorRuntimeHost interface
HRESULT hr = CorBindToRuntimeEx(
ClrVersion, //Retrieve latest version by default
L"wks", //Request a WorkStation build of the CLR
STARTUP_LOADER_OPTIMIZATION_MULTI_DOMAIN | STARTUP_CONCURRENT_GC,
CLSID_CorRuntimeHost,
IID_ICorRuntimeHost,
(void**)&spRuntimeHost
);
if (FAILED(hr))
{
*dwErrorSize = SetError(hr,ErrorMessage);
return hr;
}
//Start the CLR
hr = spRuntimeHost->Start();
if (FAILED(hr))
return hr;
CComPtr<IUnknown> pUnk;
//Retrieve the …
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用gulp-concat将组合的JavaScript和CSS资源生成到单个文件中,使用以下内容:
var concatjs = gulp
.src(['app/js/app.js','app/js/*Controller.js', 'app/js/*Service.js'])
.pipe(concat('app.js'))
.pipe(gulp.dest('build'));
Run Code Online (Sandbox Code Playgroud)
我得到一个带有这个的连接文件,但是组合输出文件中嵌入的javascript文件的顺序是随机的 - 在这种情况下,控制器在初始app.js文件之前显示,这在尝试加载Angular应用程序时会导致问题在加载任何相关资源之前需要app.js.同样地,对于最终以随机顺序组合的CSS资源,并且顺序再次有点重要 - 即.bootstrap需要在主题和任何自定义样式表之前加载.
如何设置连接过程以使订单保持不变?
更新 因此事实证明,DOES上面的排序实际上是通过在文件规范数组中明确指定文件顺序来实现的.所以在这种情况下,关键是首先列出app/js/app.js,然后让其余的脚本以任何顺序无关紧要.
我没有看到这种行为(Duh!)的原因是Gulp Watch正在运行并且gulpfile.js更新实际上没有反映在输出中.重新启动gulp确实更新了脚本.新手错误......
其他想法: 但仍然想知道 - 这是指定构建顺序的正确位置吗?现在看来你正在将应用程序逻辑(加载顺序)填充到构建脚本中,这感觉不对.还有其他方法可以解决这个问题吗?