【问题标题】:Api for ASP.NET Web Application (WebForms) Project showing 400显示 400 的 ASP.NET Web 应用程序 (WebForms) 项目的 Api
【发布时间】:2021-05-14 15:29:21
【问题描述】:

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

TagController.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)
        {
        }
    }
}

【问题讨论】:

  • 我没有 api 配置文件。有一个 web.config 文件,但这个文件没有附带 api.config,因为它是一个 Web 表单项目(至少我假设这就是原因。)我很抱歉,我来自不同的堆栈背景。
  • 我可以把它放在项目文件夹中吗?还是需要预先配置?
  • 这是一个 Web 表单项目,还是一个 MVC 项目?您需要(并且应该)正确标记此问题。显然对于一个 web 表单(asp.net web forms application),那么你不能使用控制器。
  • @AlbertD.Kallal 当然,感谢您提出带有适当标签的明确问题,但您仍然可以猜到 WebForms 项目的内容,因为我提到“我有一个普通的 Web 表单项目(... )" 并且项目结构的第一个屏幕截图显然不是基于 MVC。当他要求 WebForms 项目时,在这里添加 asp.net-mvc 标记似乎不合适?像webforms.net-framework 这样的标签会更合适。
  • 啊好吧 - 我的错 - 这是一个网络表单项目 - 所以应该添加标签 - 是的,我错过了阅读 - 所以网络表单标签肯定会清除这个。

标签: c# asp.net api webforms


【解决方案1】:

您需要在项目中进行默认(路由)配置,以便它知道应该如何处理 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)。

【讨论】:

  • 你先生,真棒!像魅力一样工作!
猜你喜欢
  • 1970-01-01
  • 2017-01-31
  • 1970-01-01
  • 1970-01-01
  • 2015-12-18
  • 1970-01-01
  • 2011-10-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多