在ASP.NET的旧时代,人们可以使用Page.ClientScript.GetWebResourceUrl来获取一个URL,该URL将通过WebResource.axd HttpHandler提取嵌入式资源.
在MVC中,似乎没有ClientScript(或者就此而言是Page).我找不到与此类似的东西.我搜索了MSDN,我甚至在bing上搜索了它并没有找到太多.
虽然我当然可以写这个功能并且可能有一个/ Scripts/controller - 我想看看是否有关于如何实现这个功能的直接等效或首选模式.谢谢
我有一个大型.NET 2 Web应用程序已更新为目标.NET 4.0框架.自更新以来,我看到我的日志中经常出现以下错误:
这是一个无效的Web资源请求.
请求的资源是" 〜/ WebResource.axd "据我所知,请求看起来很好,因为有一个很长的查询字符串,其中包含键(键是d,t)和这些键的值.
是否在框架版本之间更改了对WebResource.axd生成请求的机制?有没有人对如何调试此问题有任何建议?
编辑:
我找到了解密Web资源请求查询字符串的方法(代码如下).请求的资源pCSSFriendly|CSSFriendly.CSS.Menu.css
看起来像是解决应用程序使用的CSSFriendly.MenuAdapter资源的问题.领先的"p"看起来可能是问题所在.
private string DecryptWebResource(string urlEncodedData)
{
byte[] encryptedData = HttpServerUtility.UrlTokenDecode(urlEncodedData);
Type machineKeySection = typeof(MachineKeySection);
Type[] paramTypes = new Type[] { typeof(bool), typeof(byte[]), typeof(byte[]), typeof(int), typeof(int) };
System.Reflection.MethodInfo encryptOrDecryptData = machineKeySection.GetMethod("EncryptOrDecryptData", System.Reflection.BindingFlags.Static | System.Reflection.BindingFlags.NonPublic, null, paramTypes, null);
try
{
byte[] decryptedData = (byte[])encryptOrDecryptData.Invoke(null, new object[] { false, encryptedData, null, 0, encryptedData.Length });
string decrypted = Encoding.UTF8.GetString(decryptedData);
return decrypted;
}
catch (System.Reflection.TargetInvocationException)
{
}
return …
Run Code Online (Sandbox Code Playgroud) 我为以下类型的文件启用了IIS 6的内置HTTP压缩:
HcFileExtensions="htm
html
txt
css
js"
HcScriptFileExtensions="asp
dll
exe
aspx
asmx
ascx"
Run Code Online (Sandbox Code Playgroud)
我不清楚是否适合添加axd扩展以便我的WebResource.axd文件将被压缩.
最后,我可能错过了一个asp.net 2.0网站的其他明显扩展吗?
我发现对于一个特定的Web应用程序,对WebResource.axd的请求返回一个完全空的页面.(将链接复制并粘贴到新的浏览器窗口会产生完整的空响应文档)
IIS日志显示对WebResource.axd的请求成功(HTTP状态代码200)
应用程序本身很复杂,因此应用程序正在做的事情似乎正在引起这种情况,但我不知道是什么.
我可以采取哪些额外的调试步骤来弄清楚这些请求失败的原因,以及我应该在哪里查找应用程序特定行为可能以这种方式影响WebResource.axd的位置?
到目前为止我尝试过的事情:
这是在运行IIS 5.1的Windows XP计算机上
当我在ASP.NET页面上查看源代码时,我得到以下代码段:
<script type="text/javascript">
//<![CDATA[
var theForm = document.forms['form1'];
if (!theForm) {
theForm = document.form1;
}
function __doPostBack(eventTarget, eventArgument) {
if (!theForm.onsubmit || (theForm.onsubmit() != false)) {
theForm.__EVENTTARGET.value = eventTarget;
theForm.__EVENTARGUMENT.value = eventArgument;
theForm.submit();
}
}
//]]>
</script>
<script src="/WebResource.axd?d=5lheyan7fritNTjDRpG8vA2&t=633734967316503584" type="text/javascript"></script>
Run Code Online (Sandbox Code Playgroud)
.aspx文件看起来像这样:
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="NaturalDateDemo._Default" %>
<form id="form1" runat="server" enableviewstate="False">
Enter something to parse:<br />
<asp:TextBox ID="TextBox1" runat="server" Width="270px"></asp:TextBox>
<asp:Button ID="Button1" runat="server" Text="Parse" PostBackUrl="Default.aspx" CausesValidation="False" EnableViewState="False" UseSubmitBehavior="true" />
</form>
Run Code Online (Sandbox Code Playgroud)
两个代码块(文字代码和内容/WebResource.axd
)似乎与基于JavaScript的回发相关,我想不出任何理由我的页面需要JavaScript来进行回发.
我有一个正在托管的 Web 应用程序,我的一个客户报告说,该网站中包含的某些 Telerik javascript 库(但不是全部)无法正常工作。
到目前为止,我能够诊断的是,在该过程的某个时刻,包含 Telerik javascript 代码的 WebResource.axd 资源被阻止。要求客户端使用相同的查询字符串直接导航到 AXD 文件本身会在 Internet Explorer 中产生“与服务器的连接已重置”错误消息。
客户端尝试从其所在位置的多台计算机、防火墙和网络之外的计算机以及在家中运行的计算机下载该文件,但每次都会出现相同的错误。他们尝试过使用 Internet Explorer 和 Firefox。
但是,我能够在我们的托管网络内部、外部以及我的家庭连接中成功下载相同的文件。
根据 IIS 日志,所有记录的下载资源的尝试都会产生 200 HTTP OK 结果。
其他已经尝试过的事情:
我现在对此时可能出现的问题感到茫然。我们的托管服务器多年来一直托管着数十个不同的 ASP.NET 应用程序(包括相关应用程序的多个实例),这是我看到的第一个与此相关的投诉。
我 99% 确信问题出在客户端,防火墙或路由器内容过滤配置不正确,但这并不能解释为什么客户端在防火墙外和家里都会遇到相同的问题。
关于可能出什么问题或者甚至要问什么进一步的问题有什么想法吗?有谁见过这样的东西吗?
第一次来这里.我希望这个问题有道理:
我们有一个通用控件库,我正试图在其中使用嵌入式资源来处理图像,JS和CSS.似乎每次部署到TEST/PROD时,都会有一个时间窗口,WebResource.axd返回404.在该时间窗口到期后,页面突然开始正确地提供内容.在我的本地DEV机器上,似乎有时我可以编译和重新加载使用嵌入式资源的页面,并且它立即显示出差异.其他时候它会响应,就像有一个等待过期的缓存.
我尝试过的事情:
- 从不同的机器浏览以排除本地缓存
- iisreset
- net stop w3svc
- 从C:\ Windows\Microsoft.NET\Framework64\v4.0.30319\Temporary ASP.NET Files和C中删除临时文件:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files
- 查杀inetinfo.exe进程
- 查杀w3wp.exe进程
- 禁用IIS输出缓存
- 复制URL并添加额外的false querystring参数模仿新的页面请求
- 按Ctrl-F5 :)
似乎重新启动修复了这个问题.
我的谷歌功夫已经稀释了每个人的答案,以检查命名空间.我确信命名空间是正确的.一段时间后,资源将开始正确提供服务和正确的版本.如果它在某些时候起作用,我认为名称空间必须是正确的.
有一个相当大的问题.大约两周前,我注意到基于警报的验证(ValidationSummary)在我的网站上停止工作.经过进一步审核,WebResource.axd将空白.这不是一个错误,只是空白.
我试过通过Fiddler和Firebug跟踪请求,起初响应是200.后续缓存的请求(同一页面)返回304(正如我所料).
我已经检查过IIS配置,web.config,安装更新,Global.asax,httpHandlers等...以试图找出发生了什么或者它失败的原因.
我已经对这个问题进行了两天的故障排除,现在用完了.有谁知道这可能是什么原因?任何帮助是极大的赞赏.
我可以在我的开发机器上运行该应用程序.当我将它发布到我的生产机器时,它不起作用.说.axd文件是被禁止的.
有任何想法吗?我变得非常沮丧!
编辑:
作为测试,我已经改为"storage = file;".当我向服务器发送生成图表的请求时,图表实际显示在我的文件夹中 - 它不会在请求中被发送回浏览器.
ARAGH!到底是怎么回事!?!?!
添加了web.config
<?xml version="1.0"?>
<configuration>
<appSettings>
<add key="ChartImageHandler" value="storage=memory;"/>
</appSettings>
<connectionStrings>
<add name="VS265178_1ConnectionString" connectionString="Data Source="HIDDEN"/>
</connectionStrings>
<system.web>
<httpHandlers>
<add path="ChartImg.axd" verb="GET,HEAD,POST" type="System.Web.UI.DataVisualization.Charting.ChartHttpHandler, System.Web.DataVisualization, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
validate="false" />
</httpHandlers>
<compilation debug="true" targetFramework="4.0">
<assemblies>
<add assembly="System.Web.DataVisualization, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
<add assembly="System.ComponentModel.DataAnnotations, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
<add assembly="System.Data.Linq, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
<add assembly="System.Data.Entity, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
</assemblies>
</compilation>
<authentication mode="Forms">
<forms loginUrl="Login.aspx" name=".CFCASPXFORMSAUTH" defaultUrl="Default.aspx"/>
</authentication>
<authorization>
<deny users="?"/>
</authorization>
<machineKey validationKey="HIDDEN" decryptionKey="HIDDEN" validation="SHA1"/>
<!-- Custom …
Run Code Online (Sandbox Code Playgroud) 我已经尝试了一周,以减少我们的Web应用程序上的请求数量,但我似乎无法合并.axd
文件.我从一个本地工作的地方(开发箱)得到了一个建议,但是我们的测试和生产环境都不起作用HTTPS
.开发人员没有对此发表评论,他撰写的组件最后一次更新于2011年.(我将找到该链接并更新此帖子).
我尝试使用CompositeScript
in ScriptManager
并再次在测试/生产环境中不起作用.
我使用SquishIt来解析其他文件.(详见附件)
asp.net performance webforms webresource.axd scriptresource.axd
webresource.axd ×10
asp.net ×6
.net-4.0 ×2
.net ×1
.net-2.0 ×1
asp.net-mvc ×1
axd ×1
c# ×1
caching ×1
compression ×1
gzip ×1
httphandler ×1
iis-6 ×1
iis-7.5 ×1
javascript ×1
performance ×1
resources ×1
telerik ×1
webforms ×1