IIS报错,App_global.asax.×××.dll拒绝访问

解决方案:

①找到C:\Windows下的temp文件夹

②属性->安全->编辑->添加IIS_IUSERS,给其添加上可读写的权限,然后应用,确定即可

 

转载于:https://www.cnblogs.com/itboy-2009/p/4488095.html

<think>我们正在使用AjaxPro.2.dll进行开发,需要正确配置和使用它。根据引用内容,以下是关键步骤: 1. **添加引用**:将AjaxPro.2.dll添加到项目的引用中。 2. **配置Web.config**:在<system.web>节点下添加对应的httpHandlers配置(注意:根据引用[2],AjaxPro.2.dll的配置应该使用AjaxPro.AjaxHandlerFactory)。 3. **注册类型**:在页面或全局应用程序类中注册需要被Ajax调用的类(引用[3]展示了注册类的方法)。 具体步骤: ### 步骤1:添加DLL引用 - 在Visual Studio中,右键点击项目中的“引用” -> “添加引用”。 - 浏览并选择下载好的AjaxPro.2.dll(建议通过NuGet获取,如之前所述)。 ### 步骤2:配置Web.config 在<system.web>节点内添加httpHandlers配置。注意:根据引用[2]中关于AjaxPro.dll的配置写法,我们使用如下配置: ```xml <configuration> <system.web> <httpHandlers> <!-- 针对AjaxPro.2.dll的配置 --> <add verb="*" path="ajaxpro/*.ashx" type="AjaxPro.AjaxHandlerFactory, AjaxPro.2"/> </httpHandlers> </system.web> </configuration> ``` 注意:这里我们使用的是`AjaxPro.2`作为程序集名称,但是根据实际情况,程序集名称可能为`AjaxPro.2`(文件名是AjaxPro.2.dll,那么程序集名称通常是`AjaxPro.2`)或者可能是`AjaxPro`。如果按照NuGet包安装后的实际程序集名称,应该是`AjaxPro.2`。但是请注意,在NuGet包中,安装后的引用显示为`AjaxPro.2`,所以在配置中我们使用`AjaxPro.2`。 然而,根据引用[2]中的示例,他们使用的是`AjaxPro`(AjaxPro.dll的配置)。因此,我们需要确认我们添加的DLL的程序集名称(Assembly Name)和命名空间。通常,在安装AjaxPro.2的NuGet包后,程序集名称是`AjaxPro.2`,但根命名空间是`AjaxPro`。所以配置中的类型应该写为`AjaxPro.AjaxHandlerFactory, AjaxPro.2`。 但是,请注意,在NuGet包中,实际配置可能有所不同。我们可以查看NuGet包中的readme或者官方文档。不过,根据经验,我们可以尝试以下两种写法: 写法1(使用程序集全名): ```xml <add verb="*" path="ajaxpro/*.ashx" type="AjaxPro.AjaxHandlerFactory, AjaxPro.2, Version=7.7.31.1, Culture=neutral, PublicKeyToken=null"/> ``` 写法2(使用简单名称): ```xml <add verb="*" path="ajaxpro/*.ashx" type="AjaxPro.AjaxHandlerFactory, AjaxPro.2"/> ``` 由于版本号和公钥令牌可能因版本而异,且我们可能没有强签名,所以使用简单名称即可。如果简单名称不起作用,再尝试使用全名。 **注意**:在IIS7及以上版本(集成模式)中,还需要在`<system.webServer>`节点下配置`<handlers>`,如下: ```xml <system.webServer> <handlers> <add name="AjaxProHandler" verb="*" path="ajaxpro/*.ashx" type="AjaxPro.AjaxHandlerFactory, AjaxPro.2" /> </handlers> </system.webServer> ``` ### 步骤3:注册需要被Ajax调用的类 在需要使用AjaxPro的页面(如.aspx页面)的Page_Load事件中,或者全局应用程序类(Global.asax)中,注册包含Ajax方法的类。 例如,我们有一个类`MyClass`,它位于命名空间`MyNamespace`中,其中有一些标记了`[AjaxMethod]`的方法: ```csharp using AjaxPro; namespace MyNamespace { public class MyClass { [AjaxMethod] public string HelloWorld(string name) { return "Hello " + name; } } } ``` 在页面中注册这个类: ```csharp using AjaxPro; protected void Page_Load(object sender, EventArgs e) { // 注册MyClass,这样客户端就可以通过JavaScript调用它 AjaxPro.Utility.RegisterTypeForAjax(typeof(MyNamespace.MyClass)); } ``` 或者,如果你想在多个页面使用,可以在Global.asaxApplication_Start中注册: ```csharp protected void Application_Start(object sender, EventArgs e) { AjaxPro.Utility.RegisterTypeForAjax(typeof(MyNamespace.MyClass)); } ``` ### 步骤4:在客户端调用 在页面中,你可以使用JavaScript通过类名和方法名调用服务器端方法: ```javascript // MyClass是类名,HelloWorld是方法名 MyNamespace.MyClass.HelloWorld("World", function(response) { alert(response.value); }); ``` 注意:这里假设类名在客户端被注册为`MyNamespace.MyClass`,如果命名空间很长,你可以考虑在注册时使用别名,但AjaxPro默认使用完整的类型名(包括命名空间)。 ### 注意事项 - 确保方法标记了`[AjaxMethod]`特性。 - 如果方法在页面类(即aspx.cs的后台类)中,可以直接注册页面自身:`AjaxPro.Utility.RegisterTypeForAjax(this.GetType())`。但是,通常建议将Ajax方法放在单独的类中,以便复用。 - 如果遇到跨域问题,需要配置相应的CORS策略。 如果按照以上步骤配置后仍然无法工作,请检查: - 是否在IIS中正确配置了映射(如果是经典模式,则使用<system.web>中的配置;如果是集成模式,则还需要<system.webServer>的配置)。 - 是否在项目中正确引用了AjaxPro.2.dll。 - 注册的类是否包含在项目中,并且方法标记了`[AjaxMethod]`。 以上步骤参考了引用[2]和引用[3]的内容。 相关问题: 1. 如何调试AjaxPro.2的客户端与服务器端通信? 2. 在AjaxPro.2中如何处理异常? 3. AjaxPro.2支持哪些数据类型在客户端和服务器之间传递? 4. 如何为AjaxPro.2的方法添加身份验证? 5. 在AjaxPro.2中,如何实现文件上传?</think>### 正确使用 AjaxPro.2.dll 的开发指南 #### 🔧 1. **添加程序集引用** ```csharp // 在项目中右键点击"引用" → "添加引用" → 浏览选择 AjaxPro.2.dll // 确保在解决方案资源管理器中看到正确版本: // AjaxPro.2 (v7.7.31.1) [^1] ``` #### ⚙️ 2. **配置 Web.config** ```xml <configuration> <system.web> <httpHandlers> <!-- 关键配置(注意程序集名称) --> <add verb="*" path="ajaxpro/*.ashx" type="AjaxPro.AjaxHandlerFactory, AjaxPro.2" /> </httpHandlers> </system.web> <!-- IIS 7+ 集成模式需额外添加 --> <system.webServer> <handlers> <add name="AjaxPro" verb="*" path="ajaxpro/*.ashx" type="AjaxPro.AjaxHandlerFactory, AjaxPro.2" /> </handlers> </system.webServer> </configuration> ``` > 📌 注意:`AjaxPro.2` 是程序集名称,必须与 DLL 文件名一致[^2] #### 🛠 3. **注册 Ajax 类** 在页面或全局应用程序类中注册: ```csharp // 在页面后台代码中 protected void Page_Load(object sender, EventArgs e) { AjaxPro.Utility.RegisterTypeForAjax(typeof(YourClassName)); } // 或在 Global.asax 中全局注册 protected void Application_Start() { AjaxPro.Utility.RegisterTypeForAjax(typeof(YourBusinessLogic)); } ``` #### ✨ 4. **创建 Ajax 方法** ```csharp public class YourBusinessLogic { // 添加 [AjaxMethod] 特性标记 [AjaxPro.AjaxMethod] public static string GetServerTime(string format) { return DateTime.Now.ToString(format); } } ``` #### 🌐 5. **客户端调用** ```javascript // 通过生成的代理类调用 YourBusinessLogic.GetServerTime("yyyy-MM-dd", function(res) { // 回调处理 console.log("服务器时间: " + res.value); }, function(err) { console.error("错误: " + err.error); } ); ``` #### 🔍 6. **调试技巧** 1. 访问 `/ajaxpro/core.ashx` 查看 AjaxPro 状态 2. 检查浏览器控制台的网络请求: ``` GET /ajaxpro/YourBusinessLogic,App_Web.ashx ``` 3. 启用调试模式(Web.config): ```xml <ajaxPro> <ajaxSettings> <debug enabled="true" /> </ajaxSettings> </ajaxPro> ``` ### ⚠️ 常见问题解决 1. **404 错误**: - 确认 Web.config 中 `path="ajaxpro/*.ashx"` 的路径匹配 - IIS 需授予 `*.ashx` 的执行权限 2. **500 服务器错误**: - 检查方法是否标记 `[AjaxMethod]` - 确认参数类型可序列化(避免复杂对象) 3. **跨域问题**: ```csharp // 在 Global.asax 中添加 protected void Application_BeginRequest() { HttpContext.Current.Response.AddHeader("Access-Control-Allow-Origin", "*"); } ``` > 最佳实践:将 Ajax 方法封装在独立类中,而非页面后台[^3] --- ### 相关问题 1. 如何为 AjaxPro.2 方法添加身份验证? 2. AjaxPro.2 支持哪些客户端-服务器数据传输格式? 3. 如何在 AjaxPro.2 中处理文件上传? 4. 如何优化 AjaxPro.2 调用的性能? 5. AjaxPro.2 与现代前端框架(如 Vue/React)如何集成? > 参考官方文档: > [Ajax.NET Professional GitHub](https://github.com/michaelschwarz/Ajax.NET-Professional) > [NuGet 包文档](https://www.nuget.org/packages/AjaxPro.2/) [^1]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值