【问题标题】:Trying to implement a Breeze controller in asp.net mvc尝试在 asp.net mvc 中实现微风控制器
【发布时间】:2014-07-01 17:37:17
【问题描述】:

我正在尝试在 Asp.Net MVC4 中实现一个简单的 Breeze 控制器,但似乎无法访问它。会不会和 .Net 的标准 Web.Api 冲突?

如果我的 url 是 http://localhost:49479/api/values,那么我会从 Web Api 获得良好的返回值。

但是,如果我的网址是 http://localhost:49479/breeze/Breeze,我会得到 "Http 404" error "Resource not found"

如果我的网址是http://localhost:49479/breeze/Breeze/5,我会收到错误No HTTP resource was found that matches the request URI 'http://localhost:49479/breeze/Breeze/5'.

非常感谢您的建议。

这是我在 ..Controllers/BreezeController.cs 中的内容:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Web.Http;
using Breeze.ContextProvider;
using Breeze.WebApi2;
using Newtonsoft.Json;

   namespace RageSys.Controllers
   {
    [BreezeController]
    public class BreeezeController : ApiController
    {
        // GET api/values
        public string Get(int id)
        {
            return "value";
        }
        public IEnumerable<string> GetMtm(int id)
        {
            return new string[] { "value1", "value2" };
        }
    }
  }

在 BreezeWebApiConfig.cs 中:

using System.Web.Http;

[assembly: WebActivator.PreApplicationStartMethod(
    typeof(RageSys.App_Start.BreezeWebApiConfig), "RegisterBreezePreStart")]
namespace RageSys.App_Start {
  ///<summary>
  /// Inserts the Breeze Web API controller route at the front of all Web API routes
  ///</summary>
  public static class BreezeWebApiConfig {

    public static void RegisterBreezePreStart() {
      GlobalConfiguration.Configuration.Routes.MapHttpRoute(
          name: "BreezeApi",
          routeTemplate: "breeze/{controller}/{action}"
      );
    }
  }
}

【问题讨论】:

  • 您的控制器名为 Breeeze 控制器,带有 3 个 e's...
  • 谢谢。不过,我仍然遇到同样的错误。 WebApi 是否存在冲突?
  • 一点也不。您的路线是为微风/{controller}/{action} 设置的,但您只调用微风/{controller}。添加操作...
  • @PWKad - 因此,如果我将其称为 localhost:49479/breeze/breeze/5,为什么我仍然会收到错误消息“未找到与请求 URI 匹配的 HTTP 资源。但是,当我调用 localhost:49479/api/values/5 时它确实有效.
  • 把它改成微风/微风/GetMtm/1之类的东西

标签: asp.net-mvc-4 breeze


【解决方案1】:

您从api/values 请求中获得的结果不是来自列出的控制器。您的项目中必须有默认的ValuesControllerWebApiConfig(它定义了一个带参数的路由)。

您没有http://localhost:49479/breeze/Breeze/5 的路由。第三段(目前是 5 个)需要是 Action 方法的名称。对你来说,这意味着GetMtm。您没有带任何参数的路由,因此您将无法从:http://localhost:49479/breeze/Breeze/GetMtm/5 获得任何信息,除非您定义了这样的路由。不过,您可能不想这样做,因为 Breeze 与 Entity Framework 相结合将使生活变得非常轻松。您应该实现最简单的 Breeze / Entity Framework 应用程序,然后看看它是如何工作的。

【讨论】:

    【解决方案2】:

    如果您正在使用参数并使用 Breeze,请确保在 Breeze 查询中使用 .withParameters({ ParameterName: "Fred"}) 或 .withParameters({ id: id-value}),并确保在服务器上要调用的函数中的参数名称(在您的情况下为 GetMtm)与您在客户端使用的参数名称匹配。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-10-12
      • 1970-01-01
      • 2012-02-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多