来自对 webform localhost 中 webmethods 的 AJAX 调用的未知 web 方法错误

Posted

技术标签:

【中文标题】来自对 webform localhost 中 webmethods 的 AJAX 调用的未知 web 方法错误【英文标题】:Unknown web method error from an AJAX call to webmethods in webform localhost 【发布时间】:2020-06-23 09:30:32 【问题描述】:

我有一个奇怪的问题,我在一个 webform 类中有两个 webmethod,它们被 JQuery AJAX 调用,但我得到一个未知的 web 方法错误。我曾尝试将 webmethods 设为公开和静态,但无法使其正常工作。我正在本地测试这个。有人可以帮忙吗,谢谢!

aspx

public partial class PBXservice : System.Web.UI.Page

    protected void Page_Load(object sender, EventArgs e)
    

    
    public class PBXservices : System.Web.Services.WebService
   
        [WebMethod]
        public static string service(string data)
        
            //connect client to url where SignalR server is listening
            var hubConnection = new HubConnection("http://localhost:8081/");
            var serverHub = hubConnection.CreateHubProxy("WebHub");

            //start Hub and wait to finish connecting
            hubConnection.Start().Wait();

            //call Hub with Invoke, pass name and argument
            serverHub.Invoke("Connect", "PBXWebApp");
            // string line = null;
            while ((data = System.Console.ReadLine()) != null)
            
                // send message to the server
                serverHub.Invoke("SendPBXData", data, "PBXWebApp").Wait();
            
            return data;
        

        [System.Web.Services.WebMethod]
        public static string GetData()
        
            return DateTime.Now.ToString();
        
    


AJAX

   var pbxdata = "Hi there!";
        jQuery.ajax(
            url: 'PBXservice.aspx/service',
            type: "POST",
            dataType: "json",
            data: "'pbxdata': '" + pbxdata + "'",
            contentType: "application/json; charset=utf-8", 
            success: function (data) 
                alert(JSON.stringify(data));
            
        );




 $.ajax(  
          type: "POST",  
          url: "PBXservice.aspx/GetData",  
          data: '',  
          contentType: "application/json; charset=utf-8",  
          dataType: "json",  
          success: function (response)   
              alert(response.d);  
          ,  
 );  

网络配置

<?xml version="1.0" encoding="utf-8"?>
<!--
  For more information on how to configure your ASP.NET application, please visit
  http://go.microsoft.com/fwlink/?LinkId=169433
  -->
<configuration>
  <configSections>
    <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
  </configSections>
  <!--
    For a description of web.config changes see http://go.microsoft.com/fwlink/?LinkId=235367.

    The following attributes can be set on the <httpRuntime> tag.
      <system.Web>
        <httpRuntime targetFramework="4.5" />
      </system.Web>
  -->
  <system.web>
    <compilation debug="true" targetFramework="4.5" />
    <pages controlRenderingCompatibilityVersion="4.0" />
  </system.web>
  <entityFramework>
    <providers>
      <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
    </providers>
  </entityFramework>
  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="6.0.0.0" />
      </dependentAssembly>
    </assemblyBinding>
  </runtime>
<system.webServer>
    <handlers>
      <remove name="ExtensionlessUrlHandler-Integrated-4.0" />
      <remove name="OPTIONSVerbHandler" />
      <remove name="TRACEVerbHandler" />
      <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
    </handlers>
  </system.webServer></configuration>

【问题讨论】:

转到 jQuery 文档页面 here 并确保您发送的 datadatatypecontentType 的值正确。 另外,在使用代码之前,请使用 chrome 或 postman 之类的工具调用 web 方法,并确保您可以调用它们,获得响应,确保响应符合预期格式。这将帮助您排除故障。一旦你消除了所有的皱纹,然后编写你的 javascript 代码来调用 web 方法。 CodingYoshi 感谢您的回复,我添加第二个 webmethod 的原因是为了测试 jquery 数据属性,但在那个 ajax 调用中数据是空白的。 这会影响您的网络方法吗? 否,因为我正在获取异常详细信息:System.ArgumentException:未知的 Web 方法服务。参数名称:methodName 【参考方案1】:

早上好。你真的需要这个“PBXservices”课程吗?您可以将“服务”和“GetData”方法直接放在“PBXservice”中。然后更改“App_Code\RouteConfig.cs”中的配置: 旧:“settings.AutoRedirectMode = RedirectMode.Permanent” 新:“settings.AutoRedirectMode = RedirectMode.Off”。

ASPX.CS

公共部分类_默认:System.Web.UI.Page protected void Page_Load(object sender, EventArgs e) // 方法故意留空。 [网络方法] 公共静态字符串 GetData() 返回日期时间.Now.ToString();

ASPX (HTML)

$(文档).ready(函数 () $('#bntAjax').click(CallAjax); ); 函数 CallAjax() $.ajax( 类型:“发布”, url: "PBXservices/GetData", 数据: '', contentType: "应用程序/json; charset=utf-8", 数据类型:“json”, 成功:功能(响应) 控制台日志(响应); , );

App_Code\RouteConfig.cs

公共静态类 RouteConfig 公共静态无效注册路由(RouteCollection 路由) var settings = new FriendlyUrlSettings(); settings.AutoRedirectMode = RedirectMode.Off; 路线.EnableFriendlyUrls(设置);

【讨论】:

嗨安德森我已经删除了子类但是我必须添加 RouteConfig 文件,因为目前我没有 App_code 文件夹,注册友好的 url 会做什么来改变事情? 您的项目是网络表单吗?问题解决了吗?【参考方案2】:

我不得不将 Codebehind 属性更改为 CodeFile,就是这样!

CodeBehind="PBXservice.aspx.cs"

CodeFile="PBXservice.aspx.cs"

Parser Error Message: Could not load type 'webmarketing'

感谢大家发帖!

【讨论】:

以上是关于来自对 webform localhost 中 webmethods 的 AJAX 调用的未知 web 方法错误的主要内容,如果未能解决你的问题,请参考以下文章

ASP.NET WebForm / MVC 源码分析

除了 phpMyAdmin 之外,所有来自 WAMP 的作品

在 ASP.Net WebForms 中使用捆绑(来自 Systelm.Web.Optimization)会导致问题 [重复]

将 Webforms 项目与 Composite C1 集成

Drupal 7 webform模块对webform的解释

C# - 在 C# winform/webform 中是不是有类似 jquery handle classhtml 的东西?