我创建了一个MVC项目,按钮点击它可以将页面内容保存为.xlsx文件。这适用于Chrome / FF,但不适用于IE 9及更低版本。
为了处理这种边缘情况,我实现了一个HTTP处理程序。奇怪的是在调试时(VS 2013)"没有断点"代码工作正常,我可以在IE中下载excel文件。但是当我没有进行调试并且只是浏览页面时,我得到了一个404:请求的URL:/Home/ExportHandler.axd 我想知道为什么我会得到404,为什么我的路线选择到put / Home在url中,有没有办法删除它?这里的任何方式都是代码:
HTTP HANDLER
namespace MvcApplication2
{
public class ExportHandler : IHttpHandler
{
public void ProcessRequest(HttpContext context)
{
if (context.Request.Form["contentType"] != null &&
context.Request.Form["fileName"] != null &&
context.Request.Form["data"] != null)
{
context.Response.Clear();
context.Response.ContentType = context.Request.Form["contentType"].ToString();
context.Response.Charset = "UTF-8";
context.Response.Expires = 0;
context.Response.AppendHeader("Content-transfer-encoding", "binary");
context.Response.AppendHeader("Content-Disposition",
"attachment; filename=" + context.Request.Form["fileName"].ToString());
context.Response.BinaryWrite(Convert.FromBase64String(context.Request.Form["data"].ToString()));
context.Response.Flush();
context.Response.End();
}
}
public bool IsReusable
{
get { return false; }
}
}
}
MVC ROUTE
public class RouteConfig {
public static void RegisterRoutes(RouteCollection routes) {
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
}
}
WEB.CONFIG
<location path="Files">
<system.web>
<httpRuntime targetFramework="4.5" />
<compilation debug="true" targetFramework="4.5" />
<authentication mode="Forms">
<forms loginUrl="~/Account/Login" timeout="2880" />
</authentication>
<pages>
<namespaces>
<add namespace="System.Web.Helpers" />
<add namespace="System.Web.Mvc" />
<add namespace="System.Web.Mvc.Ajax" />
<add namespace="System.Web.Mvc.Html" />
<add namespace="System.Web.Optimization" />
<add namespace="System.Web.Routing" />
<add namespace="System.Web.WebPages" />
</namespaces>
</pages>
<profile defaultProvider="DefaultProfileProvider">
<providers>
<add name="DefaultProfileProvider" type="System.Web.Providers.DefaultProfileProvider, System.Web.Providers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" connectionStringName="DefaultConnection" applicationName="/" />
</providers>
</profile>
<membership defaultProvider="DefaultMembershipProvider">
<providers>
<add name="DefaultMembershipProvider" type="System.Web.Providers.DefaultMembershipProvider, System.Web.Providers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" connectionStringName="DefaultConnection" enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="false" requiresUniqueEmail="false" maxInvalidPasswordAttempts="5" minRequiredPasswordLength="6" minRequiredNonalphanumericCharacters="0" passwordAttemptWindow="10" applicationName="/" />
</providers>
</membership>
<roleManager defaultProvider="DefaultRoleProvider">
<providers>
<add name="DefaultRoleProvider" type="System.Web.Providers.DefaultRoleProvider, System.Web.Providers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" connectionStringName="DefaultConnection" applicationName="/" />
</providers>
</roleManager>
<sessionState mode="InProc" customProvider="DefaultSessionProvider">
<providers>
<add name="DefaultSessionProvider" type="System.Web.Providers.DefaultSessionStateProvider, System.Web.Providers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" connectionStringName="DefaultConnection" />
</providers>
</sessionState>
<httpHandlers>
<add type="MvcApplication2.ExportHandler" verb="*" path="ExportHandler.axd" />
</httpHandlers>
</system.web>
</location>