在过去的两天里,我试图让我的自定义HTTP处理程序工作, 但没有结果。我收到以下错误:
无法加载类型'AlarmHandler'。 描述:未处理 在执行当前Web请求期间发生异常。 请查看堆栈跟踪以获取有关错误的更多信息 它起源于代码。
异常详细信息:System.Web.HttpException:无法加载类型 'AlarmHandler'。
来源错误:
执行期间生成了未处理的异常 当前的网络请求。有关的来源和位置的信息 可以使用下面的异常堆栈跟踪来识别异常。
我遵循了几个教程,但我想我错过了一些小事。 我正在使用以下配置:
AlarmHandler.ashx.cs :
using System.Web;
public class AlarmHandler : IHttpHandler
{
// Constructor.
public AlarmHandler() { }
public void ProcessRequest(HttpContext context)
{
HttpRequest Request = context.Request;
HttpResponse Response = context.Response;
// Test code.
Response.Write("<html>");
Response.Write("<body>");
Response.Write("<h1>Hello from a synchronous custom HTTP handler.</h1>");
Response.Write("</body>");
Response.Write("</html>");
}
public bool IsReusable
{
get { return false; }
}
}
alarms.ashx :
<% @ WebHandler language="C#" class="AlarmHandler" codebehind="AlarmHandler.ashx.cs" %>
的web.config :
<configuration>
<system.webServer>
<handlers>
<add name="AlarmHandler" path="*.ashx" verb="*" type="IHttpHandler" />
</handlers>
</system.webServer>
</configuration>
答案 0 :(得分:3)
对我有用的是改变:
<% @ WebHandler language="C#" class="AlarmHandler" codebehind="AlarmHandler.ashx.cs" %>
要:
<% @ WebHandler language="C#" class="Namespace.AlarmHandler" codebehind="AlarmHandler.ashx.cs" %>
Namespace
是声明AlarmHandler
的名称空间。
考虑到这一点,我认为将处理程序注册更改为此可能是一个好主意:
<add name="AlarmHandler" path="*.ashx" verb="*" type="Namespace.AlarmHandler" />
顺便说一句,我在很多场合都使用过HTTP处理程序而且从来没有费心去注册它们(在我的情况下我倾向于通过Ajax显式地调用它们),所以这行甚至可能都不是必需的。
修改强>
在这种情况下,你没有使用Visual Studio,因为你没有bin目录会让事情变得有点不同,所以我们必须对处理程序做一些不同的事情。
目前,您的处理程序分为ASHX和CS文件。这通常没问题,但在你的情况下我们需要将它们结合起来。
这应该是您的Alarms.ashx
文件的内容(您不再需要AlarmHandler.ashx.cs
文件):
<% @ WebHandler language="C#" class="AlarmHandler" %>
using System.Web;
public class AlarmHandler : IHttpHandler
{
// Constructor.
public AlarmHandler() { }
public void ProcessRequest(HttpContext context)
{
HttpRequest Request = context.Request;
HttpResponse Response = context.Response;
// Test code.
Response.Write("<html>");
Response.Write("<body>");
Response.Write("<h1>Hello from a synchronous custom HTTP handler.</h1>");
Response.Write("</body>");
Response.Write("</html>");
}
public bool IsReusable
{
get { return false; }
}
}
顺便说一句,您一直关注的教程几乎肯定会假设您使用的是Visual Studio,这可能会解释您遇到的一些难题。
答案 1 :(得分:2)
仅仅是因为Google搜索了关于httphandlers和代码隐藏文件的问题:您需要做的就是将.cs文件放在App_Code文件夹中,然后从.ashx文件中引用该类。