【问题标题】:Assimilating WebApi Controller in MVC 5 Project在 MVC 5 项目中同化 WebApi 控制器
【发布时间】:2014-12-14 18:59:58
【问题描述】:

我精通 MVC 5,但 web api 2 对我来说是新的。我正在尝试将 webapi 控制器添加到我的 MVC 项目中,但我无法访问它的路径。 我在一个名为 webapi 的新文件夹中添加了一个 web api 控制器,控制器的名称是 searchcontroller,在我的 MVC 5 项目中。 我无法访问它的路径,应该是: /api/搜索/获取。 我认为这可能与我在 Global Ajax 中的 App Start 相关:

请帮忙! 这是应用程序启动中的代码:

protected void Application_Start()
    {
        AreaRegistration.RegisterAllAreas();
        RouteConfig.RegisterRoutes(RouteTable.Routes);
        GlobalConfiguration.Configure(config =>
        {
            config.MapHttpAttributeRoutes();

            config.Routes.MapHttpRoute(
        name: "ApiById",
        routeTemplate: "api/{controller}/{id}",
        defaults: new { id = RouteParameter.Optional },
        constraints: new { id = @"^[0-9]+$" }
    );

            config.Routes.MapHttpRoute(
                name: "ApiByName",
                routeTemplate: "api/{controller}/{action}/{name}",
                defaults: null,
                constraints: new { name = @"^[a-z]+$" }
            );

            config.Routes.MapHttpRoute(
                name: "ApiByAction",
                routeTemplate: "api/{controller}/{action}",
                defaults: new { action = "Get" }
            );
        });

控制器代码:

 public class WebAPISearchReultsController : ApiController
{
    public IEnumerable<ICE.Logic.ArticleSearchResult> Get(string searchQuery)
    {
        return SearchLogic.Instance.GetArticleSearchResults(searchQuery);
    }
}

【问题讨论】:

  • 你的控制器是什么样的?或者这是你实际上不能做的部分?
  • 我在原帖中添加了控制器代码
  • 您尝试从 Nuget 将 webapi 添加到您的 MVC 项目还是手动添加?从 Nuget 添加将帮助您将路由模板等正确放置在适当的位置。
  • 我手动添加:这就是我所做的:我在根目录中添加了一个新文件夹,将其命名为 WebAPI,并在这个新文件夹中添加了一个 WebAPI 控制器
  • 我建议你使用 nuget。 web.config 中有很多设置会影响到这一点。

标签: c# asp.net-mvc asp.net-mvc-4


【解决方案1】:

我会像这样构造 API 方法...

[Route("api/webapisearchreults")]
[HttpGet]
public HttpResponseMessage Get([FromUri]string searchQuery)
{
   var data = SearchLogic.Instance.GetArticleSearchResults(searchQuery);
   var response = Request.CreateResponse(HttpStatusCode.OK, data);
   return response;
 }

然后您可以检查数据,如果没有数据或异常等,您可以检查返回的HttpStatusCode。您可以将status code 设置为有意义的值。

编辑:WebApiConfig

public static class WebApiConfig
{
    public static void Register(HttpConfiguration config)
    {
        // Web API configuration and services

        // Web API routes
        config.MapHttpAttributeRoutes();

        config.Routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "api/{controller}/{action}/{id}",
            defaults: new { id = RouteParameter.Optional }
        );
    }
}

【讨论】:

  • 那么访问 webapi 怎么样?我需要在 global.asax 中做任何事情吗?
  • 不,只需通过 NuGet 添加 WebAPI 包,这就是您所需要的。检查您是否也有 WebApiConfig(查看编辑
猜你喜欢
  • 2012-10-24
  • 2017-01-05
  • 2015-09-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-24
  • 2023-04-05
  • 2012-12-12
相关资源
最近更新 更多