对于自定义HTTP处理程序,有一些不太清楚。自定义文件扩展名的HTTP处理程序和404错误
我创建根据this blog post 我已经注册了处理程序在我的web.config文件中的下列方式ScriptTranslator
HTTP处理程序:
<system.webServer>
<validation validateIntegratedModeConfiguration="false" />
<modules runAllManagedModulesForAllRequests="true" />
<handlers>
<add name="ScriptTranslatorHandler" path="*.js.axd" verb="*" type="CamelotShiftManagement.HttpHandlers.ScriptTranslator" />
</handlers>
</system.webServer>
我还添加了一个IgnoreRoute
命令我的Global.asax所以web-app可以根据we.config文件启动处理程序。
routes.IgnoreRoute("{resource}.js.axd/{*pathInfo}");
处理程序是假设翻译从我的HTML文件JS文件引用,所以我修改我的脚本参考,并在末尾添加一个axd
扩展。
处理程序收到没有AXD extention拿到剧本的内容是需要翻译的文件的请求和搜索,这里是基本ProccessRequest
行动:
public void ProcessRequest(HttpContext context)
{
string relativePath = context.Request.AppRelativeCurrentExecutionFilePath.Replace(".axd", string.Empty);
string absolutePath = context.Server.MapPath(relativePath);
string script = ReadFile(absolutePath);
string translated = TranslateScript(script,CultureInfo.CurrentCulture);
context.Response.Write(translated);
Compress(context);
SetHeadersAndCache(absolutePath, context);
}
在我的HTML文件我
所以只修改脚本标记的引用,没有名为myscript.js.axd
的实际文件,有一个名为myscript.js
的文件。
我收到404错误。
我是新来创建和使用自定义的Http处理程序,我不知道从使用期望什么。
引用的blog post意味着代码中应该没有实际的.js.axd文件,并且脚本引用的请求将重新路由到处理程序,并使用代码中的前两行处理实际的.js文件我在此之前提供。
我更喜欢天气还是不设置自定义HTTP处理程序应该首先运行处理程序代码,然后才会抛出404错误,或者我应该创建一个虚拟myScript.js.axd文件来支持处理程序操作?
确实做到了正如你写的那样..我唯一需要改变的是传递给'IgnoreRoute'的值..你在{resource}之前添加了“Scripts /”,但仍然无效。你对'ScriptTranslator.cs'的命名空间有什么意义?目前它是'CamelotShiftManagement.HttpHandlers' – Mortalus
没关系!我自己找到它..脚本本身位于/脚本的子文件夹中...所以我改变了值/脚本/管理/和presto ..它的工作..现在又一个问题..我怎么能在脚本下的所有子文件夹的忽略规则? – Mortalus
@Mortalus尝试类似于:'routes.IgnoreRoute(“Scripts/{folder}/{resource} .js.axd/{* pathInfo}”);' – webdeveloper