首页 > 解决方案 > 显示 400 的 ASP.NET Web 应用程序 (WebForms) 项目的 Api

问题描述

我是 .NET 框架的新手,我的公司还没有使用 Core,所以我想弄清楚为什么我的 Web 应用程序 api 显示 400。我有一个普通的 Web 表单项目并添加了一个名为的控制器类标记控制器.cs。我的项目在端口 44318 上,我尝试访问 localhost/44318/api/tag 没有运气。我还尝试添加一个带有 api 子文件夹的控制器文件夹和其中的控制器,但无济于事。我已经发布了我的项目层次结构和错误本身的图像。我有一种感觉,没有 global.asax 的项目可能与它有关,但另一个项目中有一个。也许 TagController.cs 指向另一个端口?任何帮助是极大的赞赏。

在此处输入图像描述

在此处输入图像描述

标签控制器.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Web.Http;
using ClarityDBWebFormsRedis;
using StackExchange.Redis;

namespace ClarityDBWebFormsRedis
{
    public class TagController : ApiController
    {
        // GET api/<controller>
        public IEnumerable<string> Get()
        {
            return new string[] { "value1", "value2" };
        }

        // GET api/<controller>/5
        public string Get(string data)        {
            
            return "doge";
        }

        // POST api/<controller>
        public void Post([FromBody] string value)
        {
        }

        // PUT api/<controller>/5
        public void Put(int id, [FromBody] string value)
        {
        }

        // DELETE api/<controller>/5
        public void Delete(int id)
        {
        }
    }
}

标签: c#asp.netapiwebforms

解决方案


您需要在项目中进行默认(路由)配置,以便它知道应该使用 ApiController 做什么,或者如何调用 API。例如,这是在 Global.asax 中定义的。您可以简单地将您的课程TagController放入一个名为“Controllers”的文件夹中。

Global.asax 相应地看起来像这样:

using System.Web.Http;
using System.Web.Routing;

(...)

protected void Application_Start(object sender, EventArgs e)
{
    RouteTable.Routes.MapHttpRoute(name: "DefaultApi", routeTemplate: "api/{controller}/{id}", defaults: new { id = RouteParameter.Optional });
}

例如,一个 ApiController 如下所示:

public class PingController : ApiController
{
    [HttpGet, AllowAnonymous]
    public IHttpActionResult Get()
    {
        return Ok();
    }
}

对于普通页面,创建一个 .aspx 页面,然后根据创建的文件夹结构在浏览器中调用它就足够了。如果你使用 MVC,那么这个页面是在项目的不同文件和文件夹中创建的(Views/Home.cshtml、Models/HomeViewModel.cs 和 Controllers/HomeController.cs)。


推荐阅读