我正在学习在ASP.NET中使用Handler。
我添加了Web表单并将扩展名更改为“* .bspx”。
我添加了一个包含如下代码的类:
namespace Experiments1
{
public class UniqueHandler: IHttpHandler
{
public void ProcessRequest(HttpContext context)
{
context.Response.ContentType = "text/plain";
if (context.Request.RawUrl.Contains(".bspx"))
{
string newUrl = context.Request.RawUrl.Replace(".bspx", ".aspx");
context.Server.Transfer(newUrl);
}
}
public bool IsReusable
{
get { return false; }
}
}
}
我在web.config文件中添加了以下行:
<system.webServer>
<handlers>
<add verb="*" path="*.bspx" name="Uniquehandler"/>
</handlers>
<modules runAllManagedModulesForAllRequests="true"/>
</system.webServer>
页面“default.aspx”有一个链接按钮,其中设置了回发网址以打开上面的页面。
<asp:LinkButton ID="lnk" PostBackUrl="~/DifferentPage.bspx" runat="server" Text="Bspx"></asp:LinkButton>
但是当我点击上面的链接按钮时,它会显示错误:
The HTTP verb POST used to access path '/DifferentPage.bspx' is not allowed.
**已编辑** Web.Config代码
<?xml version="1.0"?>
<!--
For more information on how to configure your ASP.NET application, please visit
http://go.microsoft.com/fwlink/?LinkId=169433
-->
<configuration>
<connectionStrings>
<add name="ApplicationServices" connectionString="data source=.\SQLEXPRESS;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|\aspnetdb.mdf;User Instance=true" providerName="System.Data.SqlClient"/>
<add name="LearnConnectionString" connectionString="Data Source=.;Initial Catalog=Learn;Integrated Security=True" providerName="System.Data.SqlClient"/>
<add name="LearnConnectionString2" connectionString="Data Source=.\sqlexpress;Initial Catalog=Learn;Integrated Security=True" providerName="System.Data.SqlClient"/>
</connectionStrings>
<system.web>
<compilation debug="true" targetFramework="4.0">
<assemblies>
<add assembly="System.Design, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A"/>
<add assembly="System.Web.Extensions.Design, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
<add assembly="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
</assemblies>
</compilation>
<authentication mode="Forms">
<forms loginUrl="~/Account/Login.aspx" timeout="2880"/>
</authentication>
<membership>
<providers>
<clear/>
<add name="AspNetSqlMembershipProvider" type="System.Web.Security.SqlMembershipProvider" connectionStringName="ApplicationServices" enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="false" requiresUniqueEmail="false" maxInvalidPasswordAttempts="5" minRequiredPasswordLength="6" minRequiredNonalphanumericCharacters="0" passwordAttemptWindow="10" applicationName="/"/>
</providers>
</membership>
<profile>
<providers>
<clear/>
<add name="AspNetSqlProfileProvider" type="System.Web.Profile.SqlProfileProvider" connectionStringName="ApplicationServices" applicationName="/"/>
</providers>
</profile>
<roleManager enabled="false">
<providers>
<clear/>
<add name="AspNetSqlRoleProvider" type="System.Web.Security.SqlRoleProvider" connectionStringName="ApplicationServices" applicationName="/"/>
<add name="AspNetWindowsTokenRoleProvider" type="System.Web.Security.WindowsTokenRoleProvider" applicationName="/"/>
</providers>
</roleManager>
</system.web>
<system.webServer>
<handlers>
<add verb="*" path="*.bspx" type="UniqueHandler, App_Code" name="Uniquehandler"/>
</handlers>
<modules runAllManagedModulesForAllRequests="true"/>
</system.webServer>
</configuration>
答案 0 :(得分:2)
您在webconfig文件中错过了type
<add verb="*" path="*.bspx" type="UniqueHandler, App_Code" name="Uniquehandler"/>
以下是“App_Code
”代码表示您的类文件夹名称。
修改:
这是我的解决方案文件详细信息
这是我在App-data
中的uniqueHanlder类代码using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
/// <summary>
/// Summary description for UniqueHandler
/// </summary>
public class UniqueHandler : IHttpHandler
{
public UniqueHandler()
{
//
// TODO: Add constructor logic here
//
}
public bool IsReusable
{
get { return false; }
}
public void ProcessRequest(HttpContext context)
{
context.Response.ContentType = "text/plain";
if (context.Request.RawUrl.Contains(".bspx"))
{
string newUrl = context.Request.RawUrl.Replace(".bspx", ".aspx");
context.Server.Transfer(newUrl);
}
}
}
这是我的default.aspx代码
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:TextBox ID="UsernameTextBox" Text="xxx" runat="server"></asp:TextBox>
<asp:LinkButton ID="lnk" PostBackUrl="~/Default2.bspx" runat="server" Text="Bspx"></asp:LinkButton>
</div>
</form>
</body>
</html>
这是我的web.config文件代码
<?xml version="1.0"?>
<!--
For more information on how to configure your ASP.NET application, please visit
http://go.microsoft.com/fwlink/?LinkId=169433
-->
<configuration>
<system.web>
<compilation debug="true" targetFramework="4.5"/>
<httpRuntime targetFramework="4.5"/>
</system.web>
<system.webServer>
<handlers>
<add verb="*" path="*.bspx" **type="UniqueHandler, App_Code"** name="Uniquehandler"/>
</handlers>
<modules runAllManagedModulesForAllRequests="true"/>
</system.webServer>
</configuration>