天道酬勤,学无止境

REST WebAPI 接口作为 API 调用中的参数(REST WebAPI Interface as parameter in API Call)

问题

我正在使用 ASP.NET WebAPI 构建 REST API。 一切正常,但后来我想出了在所有方法调用中使用接口的好主意。 在我更改了所有方法后,我注意到在我的 Controller 方法中将参数设置为接口后,我的 API 调用不起作用。 我正在使用 OWIN Self 主机和 Unity 依赖项注入。 这是我的相关代码:

解决我的界面:

      IUnityContainer container = new UnityContainer();

      container.RegisterType<IMyInterface, MyInterfaceImpl>(new HierarchicalLifetimeManager());
      HttpConfiguration config = new HttpConfiguration();
      config.DependencyResolver = new UnityDependencyResolver(container);  

我的控制器(我收到错误的部分)

    [Route("test")]
    [HttpGet]
    public HttpResponseMessage GetSomeData([FromUri]IMyInterface searchObject)
    {
         return this._searchService.SearchForData(searchObject);

    }

调用此方法时,我收到无法创建接口的错误。 我不明白,但问题是修复它。 我查看了带有接口而不是具体类的 ASP.NET Web API Operation 以及 https://brettedotnet.wordpress.com/2014/07/16/web-api-and-interface-parameters/ 和 ASP.NET Web API使用接口而不是具体类进行操作,但在我的情况下没有任何建议(总是收到无法创建接口的错误)。

我想知道是否有人有这样的工作示例(在 github 或其他地方)只是为了检查我做错了什么(或者甚至我可以尝试的其他想法会很好)

谢谢

回答1

因为您从查询字符串传递数据,所以这里需要一种不同的方法。 在您引用的我的博客文章中,我没有包含该场景。 由于查询字符串是通过模型绑定器处理的,因此您需要创建一个自定义模型绑定器。

在我的情况下,我选择创建一个 IoCModelBinder,如下所示。

public class IocModelBinder : IModelBinder
{
    public bool BindModel(HttpActionContext actionContext, ModelBindingContext bindingContext)
    {
        var targetObject = ServiceLocator.Current.GetInstance(bindingContext.ModelType);
        var valueProvider = GlobalConfiguration.Configuration.Services.GetValueProviderFactories().First(item => item is QueryStringValueProviderFactory).GetValueProvider(actionContext);

        foreach (var property in targetObject.GetType().GetProperties())
        {
            var valueAsString = valueProvider.GetValue(property.Name);
            var value = valueAsString == null ? null : valueAsString.ConvertTo(property.PropertyType);

            if (value == null)
                continue;

            property.SetValue(targetObject, value, null);
        }

        bindingContext.Model = targetObject;
        return true;
    }
}

并且在使用中

    /// <summary>
    /// Searches by the criteria specified.
    /// </summary>
    /// <param name="searchCriteriaDto">The search criteria dto.</param>
    /// <returns></returns>
    [HttpGet]
    public HttpResponseMessage Search([ModelBinder(typeof(IocModelBinder))]IApplicationSearchCriteriaDto searchCriteriaDto)
    {

    }

希望这可以帮助。

折叠

回答2

也许这会有所帮助:ASP.NET Web API 中的参数绑定
如何绑定到 MVC/WebAPI 中动作签名中的自定义对象
您不能使用格式化程序,因为您的数据来自 URI。 我认为您可以从链接中使用 Modelbinder 方法。

受限制的 HTML

  • 允许的HTML标签:<a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • 自动断行和分段。
  • 网页和电子邮件地址自动转换为链接。

相关推荐
  • MVC WebApi中的方法如何映射到http动词?(How does a method in MVC WebApi map to an http verb?)
    问题 在以下链接的5分钟视频中,以1:10标记,Jon Galloway说,按照惯例,将一个名为DeleteComment的方法添加到他的CommentsController控制器类中将自动映射到delete http动词。 带有WebApi的MVC如何知道如何将方法路由到正确的动词上? 我知道global.asax.cs文件中的路由会将请求路由到正确的控制器,但是删除请求如何“按惯例映射”到delete方法或任何方法? 特别是当每个动词可以使用一种以上的方法时? “按惯例”使我认为它只是在查看方法名称中的第一个单词……但是,如果是这样,它将不得不读取方法的签名以区分两个删除方法或两个get方法……以及在何处所有这些都定义好了吗? 视频:http://www.asp.net/web-api/videos/getting-started/delete-and-update 谢谢! 编辑:这是WebApi模板中的示例ValuesController类中的代码。 这是我最初提出的问题的根源。 区分这些(以及控制器中的任何其他方法)的“约定”如何工作? // GET /api/values public IEnumerable<string> Get() { return new string[] { "value1", "value2" }; } // GET /api/values/5
  • REST WebAPI Interface as parameter in API Call
    I am building a REST API with ASP.NET WebAPI. Everything worked fine, but then I came up with the great idea to use interfaces in all my method calls. After I have changed all the methods i noticed that after setting the parameter in my Controller methods as interfaces, my API calls does not work. I am using OWIN Self host and Unity dependency injection. Here is my relevant code: Resolving my Interface: IUnityContainer container = new UnityContainer(); container.RegisterType<IMyInterface, MyInterfaceImpl>(new HierarchicalLifetimeManager()); HttpConfiguration config = new HttpConfiguration()
  • ASP.NET WebAPI +肥皂(ASP.NET WebAPI + Soap)
    问题 WebAPI是否支持SOAP? 我正在尝试用MVC4编写SOAP服务器,尽管我可以在WCF中完成它,但似乎WebAPI正在取代它,但是我还没有办法在其中使用SOAP,仅是使用REST风格接口的JSON / XML。 回答1 引用斯科特·古思里(Scott Guthrie)的话:过去几年中,Web API的兴起-通过纯HTTP而不是通过更正式的服务合同(例如SOAP或WS *)公开的服务。 所以我会说不。 回答2 您应该考虑查看ServiceStack,它允许您的同一服务支持REST + SOAP API,尽管由于SOAP仅通过HTTP POST起作用,所以它有一些限制。 添加ServiceStack参考 作为SOAP的替代方案,ServiceStack提供了WCF的“添加服务引用”的更好替代方案,后者可以使用ServiceStackVS内置的“添加ServiceStack引用”功能从URL生成类型化的API。 与WCF相比的优势 简单使用小型T4模板保存生成的POCO类型。 更新和重新运行T4模板一样容易多功能Clean DTO可在所有JSON,XML,JSV,MsgPack和ProtoBuf通用服务客户端中使用可重用的生成的DTO不会耦合到任何端点或格式。 默认设置为部分设置和虚拟设置,以实现最大程度的重用与RPC服务相比
  • ASP.NET MVC中的ApiController和Controller之间的区别(Difference between ApiController and Controller in ASP.NET MVC)
    问题 我一直在玩ASP.NET MVC 4 beta,现在我看到两种类型的控制器: ApiController和Controller 。 在什么情况下我可以选择特定的控制器,我一点也不困惑。 例如:如果要返回视图,则必须使用ApiController或普通Controller ? 我知道WCF Web API现在已与MVC集成。 从现在开始,我们可以同时使用这两种控制器,请有人指出要针对哪种情况使用相应的控制器。 回答1 使用Controller渲染普通视图。 ApiController操作仅返回序列化并发送到客户端的数据。 链接在这里 引用: 注意如果您使用过ASP.NET MVC,则您已经熟悉控制器。 它们在Web API中的工作方式类似,但是Web API中的控制器派生自ApiController类而不是Controller类。 您将注意到的第一个主要区别是,Web API控制器上的操作不返回视图,而是返回数据。 ApiControllers专门用于返回数据。 例如,他们负责透明地将数据序列化为客户端请求的格式。 同样,它们默认情况下遵循不同的路由方案(如:将URL映射到操作),并按惯例提供REST-ful API。 您可以使用控制器而不是带有some(?)手动编码的ApiController来执行任何操作。 最后,两个控制器都基于ASP.NET基础。 但是如今,拥有REST
  • 在Webapi中使用ViewModel是否有意义?(Does it Make Sense to have ViewModels in the Webapi?)
    问题 我开始学习webapi,发现自己做的事情在MVC项目中是有意义的,但可能在其中没有意义。 通常在MVC项目中,我制作ViewModels并将其用作参数或将其与视图一起传回。 由于webapi中没有视图,因此我认为将ViewModel作为参数没有任何意义。 我想知道是否应该仅将我的EF域(代码优先)作为参数并将数据注释放在这些参数之上。 我通常将注解放在视图模型属性上,因为我喜欢在域上放。 但是,阻止我执行此操作的原因是,我不是100%清楚我的MVC网站将如何工作。 MVC站点只是回吐简单视图,然后使用Jquery调用您的webapi还是只调用MVC操作方法,而该方法直接调用了Webapi会调用的相同方法? 如果是第二种方法,那么我宁愿将数据注释再次放在我的视图模型上,但是随后我在EF域和VM上都放置了相同的注释,这似乎是多余的。 回答1 除了术语外,仍然具有绑定模型。 从技术上讲,它们不再是ViewModel,因为您是对的,不涉及任何视图。 但是它们肯定仍然有用。 使用它们可以使您利用模型属性的属性,并在需要时允许您在API中重用它们。 还请记住,如果您直接使用实体,则WebAPI会模型化将所有按名称匹配的参数绑定到它们,即使您不是故意这么做的。 另外,实体模型是原始数据的表示形式,但是用于绑定的模型是API请求成功满足请求所需的固定合同。
  • 使用返回XML的Recurly Rest API时的WebAPI序列化问题(WebAPI Serialization problems when consuming Recurly Rest API which returns XML)
    问题 我是ASP.Net Web API的新手。 我正在尝试与基于Recurly REST的API进行交互,并且在进行ReadAsAsync调用时遇到如下错误,这是我认为它试图序列化响应的关键所在。 {"Error in line 1 position 73. Expecting element 'account' from namespace 'http://schemas.datacontract.org/2004/07/RecurlyWebApi.Recurly'.. Encountered 'Element' with name 'account', namespace ''. "} 这是我的HttpClient实现,为简洁起见,对其进行了简化: public class RecurlyClient { readonly HttpClient client = new HttpClient(); public RecurlyClient() { var config = (RecurlySection)ConfigurationManager.GetSection("recurly"); client.BaseAddress = new Uri(string.Format("https://{0}.recurly.com/v2/", config.Subdomain));
  • 改造@Body 在 HTTP 请求中显示为参数(Retrofit @Body showing up as parameter in HTTP request)
    问题 我之前已经成功地将 Square 的Retrofit用于@GET web API 调用,但是当尝试在@POST调用@BODY JSON 作为@BODY发送时,在服务器(Rails)上,JSON 显示为参数而不是正文请求。 我的理解是@BODY会将该方法参数添加到正文中的请求中。 知道我做错了什么吗? 网络接口: @POST("/api/v1/gear/scans.json") Response postScans( @Header(HEADER_AUTH) String token, @Body JsonObject scans ); 发出网络请求: RestAdapter restAdapter = new RestAdapter.Builder() .setServer(api_url) .build(); WebApi webApi = restAdapter.create(AssetsWebApi.class); Response response = webApi.postScans(auth_token, valid_json); 回答1 事实证明,如果你想POST数据作为请求体的一部分,你需要注释的API接口方法@FormUrlEncoded并通过身体的内容作为@Field如下: @FormUrlEncoded @POST("/api/v1/gear/scans
  • 混合Angular和ASP.NET MVC / Web API?(Mixing Angular and ASP.NET MVC/Web api?)
    问题 我来自使用ASP.NET MVC / Web API,现在我开始使用Angular,但是我不清楚混合它们的正确方法。 一旦我使用Angular,MVC服务器端概念是否仍然具有任何价值? 还是我应该严格使用Web API来纯粹获取角度HTTP调用的数据? 对于将ASP.NET MVC转换为Angular的人员,任何提示都将有所帮助 回答1 纯Web API 我曾经是ASP.NET MVC的核心人物,但是由于遇到了Angular,所以我看不到使用任何服务器端内容生成框架的原因。 纯角度/ REST(WebApi)可以提供更丰富,更平滑的结果。 它速度更快,可让您建立与桌面应用程序非常接近的网站,而无需任何时髦的骇客。 Angular确实有一些学习曲线,但是一旦您的团队掌握了它,您将在更少的时间内构建更好的网站。 主要是因为您不再拥有所有这些状态(较少)问题。 例如,想象一下具有任何传统服务器端框架的向导形式。 每个页面需要分别进行验证和提交。 也许页面的内容取决于上一页的值。 也许用户按下了“后退”按钮并正在重新提交以前的表格。 我们在哪里存储客户端的状态? 使用Angular和REST时不存在所有这些复杂情况。 所以...走到黑暗的一面...我们有饼干。 类似问题 回答2 AngularJS与单页面应用程序范例有更多关联,因此,不会从呈现标记的服务器端技术中受益良多。
  • 在.NET中体验GraphQL
    前言 以前需要提供Web服务接口的时候,除了标准的WEBAPI形式,还考虑了OData、GraphQL等形式,虽然实现思路上有很大的区别,但对使用方来说,都是将查询的主动权让渡给了前端,让调用方能够更加自由地发挥或者符合自己要求的数据。其中,OData作为传统REST WEBAPI的拓展,对外还是WEBAPI的形式,为了照顾到和第三方对接的兼容性,我最终使用了OData作为首选技术。 OData在使用上方便性不言而喻,简直爱不释手,不过逐渐也发现一个问题:Mock不方便!前端常用的比如json-schema-faker无法识别OData的标记,返回的内容依旧是传统API返回的内容(无法输出@odata之类的内容)。 P.S. 最近还非常烦恼和OData一起使用EF Core时,由于有导航属性(Navigation Property),mock框架会循环引用导致Maximum call stack size exceeded的问题。一直没有找好办法,如果有朋友知道,还请不吝赐教。 于是和调用方的扯皮一直延续,最后还是先上线了后台暂时处理了这个问题。最近有一个想法浮到水面:反正mock是不可能mock了,调用方已经要恨死我了,就干脆点直接WebAPI形式也不要了,摊牌了。 GraphQL GraphQL是Facebook推出的一项提供数据API的语言,和WEBAPI相比较
  • 初识Asp.netCore RESTful WebApi
    一、背景:   因公司产品需要支持跨平台,开发团队便围绕这一目的开展学习,本人先展开了对Asp.netCore RESTful WebApi接口的学习与认知。 二、简单的概念:     1、要学习RESTful WebApi首先得知道什么是rest? REST的全称:Representational State Transfer,表述性状态转移; REST是一种架构风格,不是标准。由RoyFielding博士大约在2000年左右提出。它是一种针对网络应用的设计和开发方式,可以降低开发的复杂性,提高系统的可伸缩性; REST需要使用一些规范、协议或标准来实现这种架构风格,而且REST与协议无关。JSON并不是REST强制的,甚至Http都不是REST强制使用的,但这也仅仅是从理论上来看。 2、认识RESTful API 通过查询总结有以下几点: ①满足这REST约束条件和原则的应用程序或设计就是 RESTful; ②符合REST约束的API就叫RESTful API; ③大多部的WebAPI并不是RESTfulAPI; ④在实际开发中很多WebAPI还是没法符合RoyFielding博士提出的这套风格。 3、RESTful API有什么特点? 特点: ①每一个URI代表1种资源; ②客户端使用GET、POST、PUT、DELETE4个表示操作方式的动词对服务端资源进行操作
  • OData
    开放数据协议 (OData) 是一种用于 web 的数据访问协议OData 提供统一的方式来查询和操作数据集通过 CRUD 操作 (创建、 读取、 更新和删除)以下以asp .net为例作讲解Server:向已存在的asp .net 项目中添加web api引用Microsoft.AspNet.WebApi Microsoft.AspNet.WebApi.Client Microsoft.AspNet.WebApi.Cors Microsoft.AspNet.WebApi.WebHost在App_Start中添加类文件WebApiConfig.cspublic class WebApiConfig { public static void Register(HttpConfiguration configuration) { configuration.Routes.MapHttpRoute("API Default", "api/{controller}/{id}", new { id = RouteParameter.Optional }); } }修改Global.asax.cs文件,注入WebApiConfig//在注册默认路由之前 before registering the default Web Application route as that would
  • 如何使用操作过滤器获取用户和声明信息?(How can I get user and claim information using action filters?)
    问题 现在我这样做是为了获取我需要的信息: 在我的基本控制器中: public int roleId { get; private set; } public int userId { get; private set; } public void setUserAndRole() { ClaimsIdentity claimsIdentity; var httpContext = HttpContext.Current; claimsIdentity = httpContext.User.Identity as ClaimsIdentity; roleId = Int32.Parse(claimsIdentity.FindFirst("RoleId").Value); userId = Int32.Parse(User.Identity.GetUserId()); } 在我的控制器方法中: public async Task<IHttpActionResult> getTest(int examId, int userTestId, int retrieve) { setUserAndRole(); 我希望 roleId 和 userId 可用并填充在我的类的构造函数中,但据我所知,构造函数在授权信息可用之前触发。 有人可以告诉我如何使用操作过滤器来做到这一点吗? 理想情况下
  • Angular2到REST WebApi CORS问题(Angular2 to REST WebApi CORS issue)
    问题 我正在使用angular2前端和WebApi后端。 webapi已启用CORS var cors = new EnableCorsAttribute("*", "*", "*"); GlobalConfiguration.Configuration.EnableCors(cors); 它的工作原理是,因为我有使用此api的其他网站(jQuery / Javascript)。 但是使用angular2却没有。 我收到以下消息: 对预检请求的响应未通过访问控制检查:在所请求的资源上不存在“ Access-Control-Allow-Origin”标头。 也许与“预检请求”有关? 回答1 我在Angular2应用程序中遇到了同样的问题。 如前所述,问题是在客户端发出每个请求之前,将预检请求发送到服务器。 这种请求的类型为OPTIONS ,服务器有责任发回预检响应,其状态为200,并且标头设置为接受来自该客户端的请求。 这是我的解决方案(带快递): // Domain you wish to allow res.setHeader('Access-Control-Allow-Origin', 'http://localhost:3000'); // Request methods you wish to allow res.setHeader('Access-Control
  • 如何从带有参数的经典 ASP 向 WEB API 发送 HTTP POST?(How to send a HTTP POST from Classic ASP with a parameter to a WEB API?)
    问题 我正在尝试在同一台机器上的另一个端口上创建对 WEB API 的调用。 它工作正常并发送回字符串并命中 .NET 断点,但参数从未被传递..(它为空).. 经典 ASP 代码中是否缺少传递该字符串的内容? (数据发送) 我的调用代码: <% Response.Buffer = True Dim xml ' Set xml = Server.CreateObject("Microsoft.XMLHTTP") Set xml = server.Createobject("MSXML2.XMLHTTP") DataToSend="<?xml version=""1.0"" encoding=""UTF-8""?><codes sku=""123123"" num-codes=""234234"" />" xml.Open "POST", _ "http://localhost:1303/api/RegistrationCode", _ False xml.setRequestHeader "Content-Type", "application/x-www-form-urlencoded" xml.setRequestHeader "X-VitalSource-API-Key", "xxx" xml.Send DataToSend 'Display the HTML both as
  • WCF与ASP.NET Web API的比较(WCF vs ASP.NET Web API [closed])
    问题 关门了。 这个问题需要更加集中。 它当前不接受答案。 想改善这个问题吗? 更新问题,使其仅通过编辑此帖子即可将重点放在一个问题上。 3年前关闭。 改善这个问题 我花了几个月的时间试图掌握WCF的概念,最近我开发了我的第一个WCF服务应用程序。 为了理解配置文件中的所有设置,我付出了很多努力。 我不相信环境,但似乎您可以用它做很多令人惊奇的事情。 前几天,我发现Microsoft推出了一个名为ASP.NET Web API的新产品。 据我所知,它是一个RESTful框架,非常易于使用和实现。 现在,我试图找出这两个框架之间的主要区别,以及是否应该尝试使用新的API转换旧的WCF服务应用程序。 有人可以帮我理解它们的区别和用法吗? 回答1 新的ASP.NET Web API是先前WCF Web API项目的延续(尽管某些概念已更改)。 WCF最初是为了启用基于SOAP的服务而创建的。 对于更简单的RESTful或RPCish服务(例如jQuery之类的客户端),ASP.NET Web API应该是不错的选择。 回答2 对于我们来说,WCF用于SOAP,而Web API用于REST。 我也希望Web API也支持SOAP。 我们没有使用WCF的高级功能。 这是来自MSDN的比较: 回答3 ASP.net Web API都是基于HTTP和REST的GET,POST,PUT
  • 用于高级搜索/过滤的 .Net WebAPI URI 约定(.Net WebAPI URI convention for advanced searching /filtering)
    问题 我对 Microsoft 的 REST 和 WebAPI 比较陌生。 我们正在实施一个集线器 REST 服务,它将容纳多种类型的对象获取和设置。 作为该项目的负责人,我的任务是提出正确的 Uri 设计。 我想知道对战争有什么想法更好。 是的,我没有使用“标准”这个词,而是专门分阶段进行的。 以下是我和我的团队目前正在娱乐的选项: Http://servername/API/REST/Ldap/AD/employees?username=jsmith Http://servername/API/REST/Ldap/AD/employee/UserName?searchTerm=jsmith (this seems RPC to me) Http://servername/API/REST/Ldap/AD/employees/getusername?searchterm?jsmith 我们还创建了一个 Soap 版本,因此其余的都在 Uri 中。 感谢您的输入 回答1 对于反对党的评论,这是我前段时间整理的。 https://groups.google.com/d/msg/servicestack/uoMzASmvxho/CtqpZdju7NcJ public class QueryBase { public string Query { get; set; } public
  • WebAPI帮助页面:禁用正式发布(WebAPI Help Pages: disable for Production release)
    问题 我已经在VS 2010中使用较旧的WCF框架开发了许多内部REST接口。对于DEV和QA平台,它能够生成帮助页面的功能非常方便,但是对于生产版本,很容易禁用这些帮助页面的生成。在web.config文件中: <standardEndpoint name="" helpEnabled="false" automaticFormatSelectionEnabled="true"/> 我现在正继续使用WebAPI框架(当前是VS 2012上的第1版),但是关闭此功能似乎并不简单(即,我找不到有关如何执行此操作的任何信息)一个web.config文件)。 当然,我可以继续在代码本身中手动执行此操作,但是肯定有一种更简单的方法; 类似于WCF如何执行上述操作。 我想使用web.config文件方法,因为我已经为其他设置准备好了web.release.config转换文件。 任何对此的最佳做法的想法,将不胜感激。 回答1 对于基于web.config的启用或禁用帮助页面,Web API没有开箱即用的支持。 您可以考虑以下一些选项: 由于HelpPage是作为MVC区域安装的,因此在部署到生产环境时,您可以仅排除此HelpPage文件夹。 创建一个操作筛选器,该筛选器将返回404,如此处建议的那样:有条件地禁用ASP.NET MVC Controller 注意:对于上述情况
  • ASP.NET Web API:记录/指定服务(ASP.NET web api: documenting/specifying a service)
    问题 我一直在看asp.net Web Api,并且我喜欢实现实用的Web服务的简单性。 但是,如何记录/指定以这种方式实现的服务的接口? 例如,是否有任何我可以传递或生成给没有.NET背景的Java专家的规范,使他可以轻松地调用和使用该服务? 我能给javascript家伙些什么? 理想情况下,我想为SOAP专家提供SOAP / XSD或类似的优点(易于使用类型正确的对象反序列化),同时又保留了可从Web浏览器调用的服务(即,支持非伪造的JSON)。 更新 值得注意的是,自从我最初发布此问题以来,我发现ServiceStack可以更自然地处理此问题。 根据客户端选择,为同一服务开箱即用地支持JSON,SOAP和WSDL。 如果您确实想要SOAP + JSON,则它可能是比ASP.NET Web Api更好的框架。 回答1 2016年3月更新 自从得到答案以来已经有一段时间了,用于记录任何Rest API的工具也已经出现了很多。 我们目前正在评估Swagger 2.0,现已将其用于Open Api Initiative,RAML和API蓝图。 对于WebAPI项目,有一个Swashbuckle工具可以自动创建Swagger(开放API)格式的文档。 记录REST服务的格式: 在结构化和标准化REST服务的描述方面进行了一些尝试: Web应用程序描述语言(WADL)
  • ASP.NET WebApi与MVC? [关闭](ASP.NET WebApi vs MVC ? [closed])
    问题 关门了。 这个问题需要更加集中。 它当前不接受答案。 想改善这个问题吗? 更新问题,使其仅通过编辑此帖子即可将重点放在一个问题上。 3年前关闭。 改善这个问题 使用ASP.NET MVC控制器,您可以公开不同格式的数据。 AspNetWebAPI是专门为创建API而设计的,但是我可以使用MVC控制器轻松地做到这一点,我不清楚在什么情况下它会比传统MVC控制器更好。 我对WebApi的好处显而易见并且应该在我的应用程序中添加另一个复杂性层的场景感兴趣。 问题:就MVC而言,使用asp.net WebApi有哪些优点和/或缺点? 回答1 WebApi允许创建可以通过HTTP而不是通过诸如WCF或SOAP之类的正式服务公开的服务。 另一个不同之处在于WebApi如何使用Http协议并使之真正成为一流的Http公民。 更新: ASP.NET Core Web API已集成到MVC项目类型中。 ApiController类被合并到Controller类中。 有关更多信息,请访问:https://wildermuth.com/2016/05/10/Writing-API-Controllers-in-ASP-NET-MVC-6 比较,讨论和教程的相关链接: MVC5 vs WebApi项目 ASP.NET MVC和ASP.NET Web API之间的区别 ASP.NET
  • .NET Core:通过Web API进行微服务交互
    目录 介绍 命名协议 MicroCommerce应用程序结构 MicroCommerce应用开发 1.接口项目,微服务接口和模型类 2. ProductCatalog项目 3. ShoppingCart项目 4. ActivityLogger项目 5. WebUI项目,用户界面 6.关于通用功能的几句话 应用测试 结论 缺点 下载源代码26.3 KB 介绍 几乎所有在.NET Core中使用微服务的人都可能知道Christian Horsdal的书“.NET Core中的微服务:Nancy中的示例”。在这里很好地描述了基于微服务构建应用程序的方法,包括监视、记录和访问控制进行了详细讨论。唯一缺少的是使微服务之间的交互自动化的工具。 在通常的方法中,开发微服务时,将并行开发该微服务的Web客户端。并且每次微服务的Web界面更改时,都必须为Web客户端中的相应更改花费更多的精力。使用OpenNET生成一对web-api/web-client的想法也很费力,我希望对开发人员来说更透明。 因此,采用一种替代方法来开发应用程序,我想: .NET接口使用属性来描述微服务结构,这些属性描述了方法的类型、路由和传递参数的方式,就像在MVC中所做的那样。微服务功能是在.NET类中专门开发的,实现了此接口。微服务端点的发布应该是自动的,不需要复杂的设置。微服务的Web客户端应基于该接口自动生成