API 404错误使用C#
我正在尝试创建一个简单的API,并从html中调用它。今天早些时候我做了一些类似的东西,但我不能让这个工作。它只返回一个404错误 来自HTML的脚本API 404错误使用C#,c#,jquery,C#,Jquery,我正在尝试创建一个简单的API,并从html中调用它。今天早些时候我做了一些类似的东西,但我不能让这个工作。它只返回一个404错误 来自HTML的脚本 <script src="http://ajax.aspnetcdn.com/ajax/jQuery/jquery-2.0.3.min.js"></script> <script> var uri = 'api/books';
<script src="http://ajax.aspnetcdn.com/ajax/jQuery/jquery-2.0.3.min.js"></script>
<script>
var uri = 'api/books';
$(document).ready(function () {
$.getJSON(uri)
.done(function (data) {
$.each(data, function (key, item) {
$('<li>', { text: formatItem(item) }).appendTo($('#books'));
});
});
});
编辑:
WebApiConfig.cs
namespace WebApplication1
{
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
}
}
}
尝试相对于根路径使用
。您的uri中缺少反斜杠。更改uri
如下:
var uri = '/api/books';
并确保您拥有config.maphttpAttribute路由()在WebApiConfig.Register()方法中的code>
编辑1
您可以在浏览器开发人员工具的控制台部分查看网络错误(如404)的详细信息。只需在浏览器中点击F12即可激活开发者工具窗口,并查看控制台选项卡。您可能会看到ajax调用的目标位置与www.yoursite.com/api/books
不同,请尝试使用相对于根路径的路径。您的uri中缺少反斜杠。更改uri
如下:
var uri = '/api/books';
并确保您拥有config.maphttpAttribute路由()在WebApiConfig.Register()方法中的code>
编辑1
您可以在浏览器开发人员工具的控制台部分查看网络错误(如404)的详细信息。只需在浏览器中点击F12即可激活开发者工具窗口,并查看控制台选项卡。您可能会看到ajax调用的目标位置与www.yoursite.com/api/books
不同,首先更改控制器代码:
using WebApplication1.Models;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Web.Http;
namespace WebApplication1.Controllers
{
[RoutePrefix("api/books")]
public class BookController : ApiController
{
[HttpGet]
[Route("")]
public IHttpActionResult ShowAllProducts()
{
var db = new DbSearchQuery();
return Ok(db.LoadBooks());
}
}
}
然后再次检查您的Ajax调用是否指向正确的地址:http://yourhost/api/books
查看浏览器控制台
[评论后编辑]
请检查您的项目是否包含启动类。如果您正在使用Owin,则必须创建一个Startup.cs
文件来引导应用程序。下面是一个基本示例:
using Microsoft.Owin;
using Microsoft.Owin.Security.OAuth;
using Owin;
using System;
[assembly: OwinStartup(typeof(WebApplication1.Startup))]
namespace WebApplication1
{
public class Startup
{
public void Configuration(IAppBuilder app)
{
var config = new HttpConfiguration();
WebApiConfig.Register(config);
app.UseWebApi(config);
}
}
}
有关如何在此处启动基于Owin的web应用程序的详细信息通过更改控制器代码开始:
using WebApplication1.Models;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Web.Http;
namespace WebApplication1.Controllers
{
[RoutePrefix("api/books")]
public class BookController : ApiController
{
[HttpGet]
[Route("")]
public IHttpActionResult ShowAllProducts()
{
var db = new DbSearchQuery();
return Ok(db.LoadBooks());
}
}
}
然后再次检查您的Ajax调用是否指向正确的地址:http://yourhost/api/books
查看浏览器控制台
[评论后编辑]
请检查您的项目是否包含启动类。如果您正在使用Owin,则必须创建一个Startup.cs
文件来引导应用程序。下面是一个基本示例:
using Microsoft.Owin;
using Microsoft.Owin.Security.OAuth;
using Owin;
using System;
[assembly: OwinStartup(typeof(WebApplication1.Startup))]
namespace WebApplication1
{
public class Startup
{
public void Configuration(IAppBuilder app)
{
var config = new HttpConfiguration();
WebApiConfig.Register(config);
app.UseWebApi(config);
}
}
}
有关如何启动基于Owin的web应用程序的详细信息,请参见此处添加的Global.aspx
namespace WebApplication1
{
public class Global : System.Web.HttpApplication
{
protected void Application_Start(object sender, EventArgs e)
{
GlobalConfiguration.Configure(WebApiConfig.Register);
}
}
添加了Global.aspx
namespace WebApplication1
{
public class Global : System.Web.HttpApplication
{
protected void Application_Start(object sender, EventArgs e)
{
GlobalConfiguration.Configure(WebApiConfig.Register);
}
}
似乎您的路由看起来像主机/api/api/Book
。尝试删除操作方法注释中的第一个slugapi
。好的,你可以在浏览器开发工具中检查你的请求。你确定你的加载本返回正确的json吗?根据jquery文档:从jquery 1.4开始,如果JSON文件包含语法错误,请求通常会自动失败
我相当确定,因为我创建了另一个概念验证解决方案,在该解决方案中,如果查询完全相同,我从同一数据库中提取了该解决方案。我刚刚将相同的api控制器和jquery添加到另一个将使用此api的解决方案中。@请检查GET请求的URL。您的路由看起来像host/api/api/Book
。尝试删除操作方法注释中的第一个slugapi
。好的,你可以在浏览器开发工具中检查你的请求。你确定你的加载本返回正确的json吗?根据jquery文档:从jquery 1.4开始,如果JSON文件包含语法错误,请求通常会自动失败
我相当确定,因为我创建了另一个概念验证解决方案,在该解决方案中,如果查询完全相同,我从同一数据库中提取了该解决方案。我刚刚将相同的api控制器和jquery添加到另一个将使用此api的解决方案中。@请检查GET请求的URL。Ajax调用将指向正确的http://..../api/books 已经,但仍然得到404。你能添加Startup.cs和WebApiConfig.cs代码吗?刚刚添加了它,如果您还需要其他信息,请告诉我。请同时发布您的Startup.cs文件,其中包含当前代码。我没有其他建议。在您上次发表评论后编辑答案。Sajax呼叫将转到正确的位置http://..../api/books 已经,但仍然得到404。你能添加Startup.cs和WebApiConfig.cs代码吗?刚刚添加了它,如果您还需要其他信息,请告诉我。请同时发布您的Startup.cs文件,其中包含当前代码。我没有其他建议。请在上次发布后编辑答案comments@suavocado确保您的应用程序正在运行(在浏览器中检查该url),并且可以验证您正在同一url中发出ajax请求吗(只是为了排除cors问题)@suavocado确保您的应用程序正在运行(在浏览器中检查该url),并且您是否可以验证您在同一url内发出ajax请求(只是为了排除cors问题)