Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/297.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
API 404错误使用C#_C#_Jquery - Fatal编程技术网

API 404错误使用C#

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';

我正在尝试创建一个简单的API,并从html中调用它。今天早些时候我做了一些类似的东西,但我不能让这个工作。它只返回一个404错误

来自HTML的脚本

 <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
。尝试删除操作方法注释中的第一个slug
api
。好的,你可以在浏览器开发工具中检查你的请求。你确定你的加载本返回正确的json吗?根据jquery文档:
从jquery 1.4开始,如果JSON文件包含语法错误,请求通常会自动失败
我相当确定,因为我创建了另一个概念验证解决方案,在该解决方案中,如果查询完全相同,我从同一数据库中提取了该解决方案。我刚刚将相同的api控制器和jquery添加到另一个将使用此api的解决方案中。@请检查GET请求的URL。您的路由看起来像
host/api/api/Book
。尝试删除操作方法注释中的第一个slug
api
。好的,你可以在浏览器开发工具中检查你的请求。你确定你的加载本返回正确的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问题)