调用服务器端方法不工作404找不到

时间:2015-11-13 14:35:32

标签: c# jquery ajax

我的项目中名为Models的文件夹中有一个名为server的类(解决方案 - >项目 - >模型 - > Server.cs)

我有一个简单的按钮,点击后我想调用我的服务器端方法并获取返回的字符串..

我收到错误404(未找到)。我尝试了几种不同的网址,但它似乎无法工作......

的index.html:

<body>
<h1>Weeelcome</h1>

<button type="button" id="btnName" style="width: 100px; height: 50px;">Get My Name</button>
<p ID="lblTest"></p>
</body>

我的js:

$(document).ready(function () {
$("#btnName").click(function () {
    $.ajax({
        url: "../../Models/GetMyName",
        type: "GET",
        success: function (result) {
            alert(result);
        },
        error: function (ex) {
            //alert("Error");
        }
    });
});
});

Server.cs

public class Server
{
    [WebMethod]
    public static string GetMyName()
    {
        return "MyName";
    }
}

错误

  

获取http://localhost:50603/Models/GetMyName 404(未找到)

1 个答案:

答案 0 :(得分:1)

您的问题不清楚您使用的是ASP.NET MVC吗?因为在那种情况下index.html假设是index.cshtml

其次,如果您使用的是asp.net mvc,我相信您正在尝试访问模型而不是控制器。您提供了错误的路径(使用文件或位置路径),而您需要提供服务器路径/您的Server.cs路径/您的操作路径

第三个错误是非静态类server.cs具有静态功能

第四,如果您在场景后面使用Web服务(asmx)并使用html页面与您的Web服务进行通信,那么下面将提到解决方案,

您需要在Server.cs中声明它的GetMyName方法以获取或设置一个值,该值指示是否使用HTTP GET调用该方法。

   [WebMethod]
   [ScriptMethod(UseHttpGet = true)]

参考:https://msdn.microsoft.com/en-us/library/system.web.script.services.scriptmethodattribute.usehttpget(v=vs.110).aspx

我无法测试此代码,但我相信这对您有用

<强>的index.html

<head>
 <script>
    var __appBasePath = 'http://yourserver.com/';
 <script>
</head>
<body>
<h1>Weeelcome</h1>

 <button type="button" id="btnName" style="width: 100px; height: 50px;">Get My Name</button>
<p ID="lblTest"></p>
</body>

你的JS

$(document).ready(function () {
$("#btnName").click(function () {
    $.ajax({
        url:  __appBasePath  + "Server/GetMyName",
        type: "GET",
        success: function (result) {
            alert(result);
        },
        error: function (ex) {
            //alert("Error");
        }
    });
   });
});

您的Server.cs(如果是Web服务) 注意:非静态类不能有静态方法:所以删除静态

public class Server
{
   [WebMethod]
   [ScriptMethod(UseHttpGet = true)]
   public string GetMyName()
   {
       return "MyName";
   }
}

如果您使用的是ASP.NET MVC Controller或Web API:

如果您正在使用asp.net MVC,那么您正在尝试调用您在模型中定义的函数。我可以看到你提到的(解决方案 - &gt;项目 - &gt;模型 - &gt; Server.cs)如果你使用的是asp.net MVC / Web API,那么只需在控制器action.ie中使用[HttpGET]。

<强> Model.cs

public class ServerModel
{
   public string GetMyName()
   {
       return "MyName";
   }
}

如果是 MVC控制器

public class ServerController : Controller
{
   public JsonResult GetMyName()
   {
       ServerModel model = new ServerModel();
       var name = model.GetMyName;
       return Json(name, JsonRequestBehavior.AllowGet);
   }
}

如果你使用的是Asp.net mvc web apis,你只需要在ServerController类中将Controller替换为ApiController。

如果是WebAPI 替换:

public class ServerController : Controller

public class ServerController : ApiController