我们有一个HttpHandler,它直接处理来自自定义客户端软件的HTTP上的二进制帖子.客户端软件偶尔发送数据,导致IIS 7响应400 - 错误请求.由于"400 Bad Request"的特殊之处在于HTTP.SYS在内核模式下透明地处理它而不通知用户模式,因此不会引发任何错误在ASP.NET中处理.是否有可能在ASP.NET中捕获此http 400,以便我可以在这些方案中将特定数据写入Response流?重定向到另一个页面不是一个选项,因为它需要在当前的请求/响应中.
我们的工作室正在将ASP.NET MVC集成到一个大型Web应用程序中,该应用程序利用在system.webServer\handlers下的web.config中定义的自定义和第三方HTTP处理程序.以这种方式利用HTTP处理程序对我们来说非常好,因为我们不需要重新编译应用程序,也不需要将实际处理程序页面放在Web范围内的磁盘上,以用于每个产品实例.
是否真的有必要在我们的global.asax中添加显式的忽略路由,以便运行时可以遵守web.config中定义的处理程序?我认为在检查了system.webServer\handlers中定义的处理程序之后会调用Web.Routing (而不是相反).
我们使用模块化设计,允许在添加功能时从web.config添加/删除处理程序.随着MVC路由的引入,我们需要在global.asax文件中为web.config中定义的每个可能的处理程序添加忽略路由.
请注意,磁盘上不存在这些处理程序的实际文件 - 它们是虚拟的并嵌入在程序集中.以下是第三方处理程序的示例,现在需要在global.asax中显式忽略路由:
<system.webServer>
<handlers>
<!-- telerik radcontrols -->
<add name="TelerikDialogHandler" verb="*" path="Telerik.Web.UI.DialogHandler.aspx" type="Telerik.Web.UI.DialogHandler, Telerik.Web.UI, Version=2009.1.402.20, Culture=neutral, PublicKeyToken=121fae78165ba3d4"></add>
</handlers>
</system.webServer>
Run Code Online (Sandbox Code Playgroud)
因此,对于记录,如果您使用System.Web.Routing,则必须包含在Web.Config中指定的Http Handler的忽略路由?或许我做错了什么?
我收到此错误,即 this.handler.handle 不是我在 Angular 6 中使用 karma/jasmine 进行的单元测试中的函数。当我在我的项目文件夹中输入“ng test”命令时,这个错误出现在我的命令行中。
Chrome 67.0.3396 (Windows 10.0.0) AppComponent should create FAILED
Failed: _this.handler.handle is not a function
TypeError: _this.handler.handle is not a function
Run Code Online (Sandbox Code Playgroud)
对于应该创建 AppComponent 的测试,这里是我的 .spec 文件
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { RouterTestingModule } from '@angular/router/testing';
import { AppComponent } from './app.component';
import { CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';
import { FormsModule, FormBuilder } from '@angular/forms';
import { HttpClientModule, HttpClient, HttpHandler } from '@angular/common/http';
describe('AppComponent', () => {
let …Run Code Online (Sandbox Code Playgroud) 我试图用ASP.net/C#设计一个这样的系统.
用户付费下载一些内容(文件 - mp3/PDF,doc等).我应该能够跟踪用户下载的字节数.如果下载的字节数与服务器上的字节数相匹配,我应该在DB中设置一个标志(告知下载成功并阻止他们再次下载文件/要求他们再次支付下载费用).如果下载不完整,他们应该能够再次下载文件而无需再次付款(因为不会设置标志).
有没有办法跟踪客户端成功下载的字节数?
另外,当我在WinXP机器中看到文件大小时,我看到两种尺寸(磁盘大小,大小).我应该考虑哪一个?它会因操作系统而异吗?
我正在尝试在我的global.aspx Application_Start方法中读取一些配置.当我读到ConfigurationManager.GetSection("system.web/httpHandlers")一切都很好:
ConfigurationManager.GetSection("system.web/httpHandlers"){System.Web.Configuration.HttpHandlersSection} base {System.Configuration.ConfigurationSection}:{System.Web.Configuration.HttpHandlersSection}处理程序:Count = 48
但是当我读ConfigurationManager.GetSection("system.webServer/handlers")(包含我的自定义处理程序,它返回null.我做错了什么?
该部分如下所示:
<system.webServer>
<handlers>
<add verb="*" path="*.loc" name="LocalizedResourceStreamer"
type="CFW.WebUI.HttpHandlers.LocalizedResourceStreamer,WebUI" />
</handlers>
</system.webServer>
Run Code Online (Sandbox Code Playgroud)
笔记:
ConfigurationManager.GetSection默认情况下将嵌套考虑在内.至今:
看起来像system.webServer被忽略了.
我已经为我的Jquery ajax调用创建了一个http处理程序.哪个工作正常,jquery调用如下所述
$.ajax({
url: "Services/name.ashx",
contentType: "text/plain",
data: {
CustMobile: a,
CustName: b,
CustEmail: c
},
contentType: "application/json; charset=utf-8",
success: function (data) {
$("#loading").hide();
},
error: function () {
$("#loading").hide();
}
});
Run Code Online (Sandbox Code Playgroud)
现在我的问题是我可以通过后面的代码调用name.ashx处理程序.我在使用带有C#的asp.net.我知道可以通过Response.write("")编写整个脚本部分来调用它.Ans还注册页面脚本方法.
但是有什么方法可以通过它向处理程序发送请求并使用c#从处理程序中获取响应.
谢谢.
环境:
用户场景:
用户输入针对大型数据集的搜索条件.启动请求后,它们将导航到结果页面,等待数据加载,然后可以优化数据.
技术场景:
用户发送搜索条件后(通过ajax调用),UI调用后端服务.后端服务查询事务系统并将结果数据放入db"缓存" - 非规范化表,设置用于进一步细化数据(即排序,过滤).UI等待数据被缓存,然后在收到通知已完成的过程后,导航到结果页面.然后,生成的页面调用以从非规范化表中获取数据.
问题:
对于大型查询,搜索相对较慢(15-25秒),最终必须根据输入的条件查询许多系统.其他查询(<4秒)相对较快.
技术限制:
我们无法完全重新构建此搜索/结果系统.在UI和后端如何捆绑在一起之间存在许多复杂性.执行搜索条件后,页面是必需的(因为在StackOverflow上无法解决的约束).
我们也不能要求组织在搜索之前对数据进行非规范化,因为数据必须是实时的,即如果用户在其他系统中进行了更改,则数据必须在之后进行搜索时正确显示.
我想要遵循的流程:
我想欺骗一点.我想在fire-forget模型中通过异步HttpHandler发出"Cache"请求.
发出查询后,我想将页面转换为结果页面.
在转换页面上,我想轮询"缓存"表以查看数据是否已插入其中.
我想立即转换的原因是结果页面本身很昂贵(即使没有获取数据) - 在调用从缓存中获取数据的服务之前仍然需要2秒的加载时间.
题:
即使我使用javascript重定向导航离开页面,通过异步处理程序调用的ASP.NET线程是否可靠地继续处理?
技术界限2:
是的,我知道......这个搜索过程听起来效率不高.我现在无能为力.在我们继续研究如何重新构建它的同时,我正在尽我所能使它更好地发挥作用.
如果您的答案是:"扔掉它并重新开始",请不要回答.这是不可接受的.
如何使用c#从asp.net中的sql数据库中检索图像.
我想从数据库中检索图像文件,然后在标签中显示图像.
我尝试这个代码,但它无法正常工作
<asp:Image ID="Image1" runat="server" ImageUrl="" Height="150px" Width="165px" />
Run Code Online (Sandbox Code Playgroud)
Byte[] bytes = (Byte[])ds.Tables[0].Rows[0]["image"];
Response.Buffer = true;
Response.Charset = "";
Response.Cache.SetCacheability(HttpCacheability.NoCache);
Response.ContentType = "image/jpg";
Response.BinaryWrite(bytes);
Response.Flush();
Response.End();
Run Code Online (Sandbox Code Playgroud)
如何给出ImageUrl=""这个图像的链接???
我在哪里可以获得所有默认IIS HTTP处理程序的列表?我需要文件!! 我已经阅读了一些博客,建议删除数十个未使用的HTTP处理程序,以提高性能和安全性.
例如,建议删除TraceHandler-Integrated和TraceHandler-Integrated-4.0,否则导航到/trace.axd会导致500内部服务器错误而不是404 Not Found,并且您不应该在生产环境中进行跟踪.
GitHub项目(现已删除)建议从您的站点删除的一些HTTP处理程序:
<system.webServer>
<handlers>
<remove name="TraceHandler-Integrated-4.0" />
<remove name="TraceHandler-Integrated" />
<remove name="AssemblyResourceLoader-Integrated-4.0" />
<remove name="AssemblyResourceLoader-Integrated" />
<remove name="WebAdminHandler-Integrated-4.0" />
<remove name="WebAdminHandler-Integrated" />
<remove name="HttpRemotingHandlerFactory-soap-ISAPI-2.0-64" />
<remove name="svc-ISAPI-4.0_32bit" />
<remove name="ScriptHandlerFactoryAppServices-Integrated-4.0" />
<remove name="ScriptResourceIntegrated-4.0" />
<remove name="svc-ISAPI-4.0_64bit" />
<remove name="svc-Integrated-4.0" />
<remove name="vbhtm-ISAPI-4.0_32bit" />
<remove name="vbhtm-ISAPI-4.0_64bit" />
<remove name="vbhtm-Integrated-4.0" />
<remove name="vbhtml-ISAPI-4.0_32bit" />
<remove name="vbhtml-ISAPI-4.0_64bit" />
<remove name="vbhtml-Integrated-4.0" />
<remove name="xamlx-ISAPI-4.0_32bit" />
<remove name="xamlx-ISAPI-4.0_64bit" />
<remove name="xamlx-Integrated-4.0" />
<remove name="xoml-ISAPI-4.0_32bit" />
<remove …Run Code Online (Sandbox Code Playgroud) 我有一个遗留项目有一个IHttpHandler实现类,使用一个巨大的switch语句等路由所有请求.我试图引入属性路由与ApiControllers,但第一个始终具有优先级.是否可以配置系统(代码或IIS),以便Web ApiControllers优先于我的单个IHttpHandler实现类?在IIS中,我首先放置了我的AttributeRouting,然后是所有的aspx,但仍然没有首先处理Web Api控制器.无论我做什么(在同一个项目下都有它们).我不想介绍一个单独的项目.
编辑:有一个IHttpModule根据api /之后的内容决定将其路由到特定的ashx文件.其中一个是描述的..
编辑2:更具体地说:如果uri没有过滤的东西列表[文件,消息,属性...],它将被路由到Resource.aspx
所以api/file,api/message,api/property将从其他.ashx文件中处理 - 否则流量将转到Resource.ashx ...
因此,具有api/endpoint1,api/endpoint2,api/endpoint3的请求都将转到Resource.aspx.问题是如何将api/endpoint3路由到下面描述的API控制器.谢谢
简化的代码架构:
//SolutionName/Api/MyModule.cs (Legacy Code)
//this routes based on what is after api/ to Resource.ashx or other ashx files
public class MyModule : IHttpModule {
//if url doesn't contain [file,message,property ...] route to Resource.ashx
}
Run Code Online (Sandbox Code Playgroud)
//SolutionName/API/Resource.ashx (Legacy Code)
//this is hit at any request solutionname/api/anything
public class DefaultHandler : IHttpHandler
{
public void ProcessRequest(HttpContext context) {
String APIBranch = parse(context);
switch(APIBranch)
{
case "endpoint1": methodOne(); break;
case "endpoint2": …Run Code Online (Sandbox Code Playgroud) httphandler ×10
asp.net ×8
c# ×5
asp.net-mvc ×2
http ×2
iis ×2
angular ×1
asynchronous ×1
file ×1
httpmodule ×1
iis-7 ×1
javascript ×1
performance ×1
security ×1
sql-server ×1
web-config ×1