Tag: asp.net web api

ASP.Net Web API与WCF,我应该在我的项目中选择哪一个

到目前为止,我已经阅读了很多关于WCF和ASP.Net Web API之间差异的文章。 不幸的是,我无法清楚地知道什么能满足我的目的。 我读过的大多数文章都强调了两个Web服务的设计观点。 但我很困惑什么对我的项目最有效,为什么? 这是我对该项目的简要描述。 我需要在两台服务器之间创建一个通信通道(两者都是用C#编写的)。 服务器将使用消息(某种类型的命令)进行通信。 消息有时只能是确认,有时消息可能包含进行某些计算的指令。 例如,一条消息可以绘制内容,或发送短信等。消息不一定涉及任何数据库事务。 但是这些消息有时可以将大文本文件作为有效载荷发送(最大约1-5 MB)。 我相信WCF肯定会这样做,但我可以用ASP.net web API做同样的事情。 因为到目前为止我已经看到了ASP.Net web api的所有示例:它们适用于操纵某种DB存储(GET,PUT,DELETE)的RESTful服务。 但在我的情况下,我将需要公开服务点 进行某种处理,例如返回计算值,发送和确认消息等。 不只是操纵数据库存储。 那么,最好和最简单的方法应该是什么? 需要提到的是,我没有找到使用ASP.Net Web API实现此目的的任何直接示例。

如何模拟UserManager和RoleManager进行unit testing

我已经模拟了抽象类来测试类的具体方法如下。 var mock = new Mock(); mock.CallBase = true; var ta = mock.Object; ta.ControllerContext = new HttpControllerContext { Request = new HttpRequestMessage() }; var owinMock = new Mock(); owinMock.Setup(o => o.Authentication.User).Returns(new ClaimsPrincipal()); owinMock.Setup(o => o.Request).Returns(new Mock().Object); owinMock.Setup(o => o.Response).Returns(new Mock().Object); owinMock.Setup(o => o.Environment).Returns(new Dictionary { { “key1”, 123 } }); var traceMock = new Mock(); […]

使用集成测试Web Api

所以我发现在[Authorize]标签上有些东西让我有所启发,但没有什么可以解决我的问题。 我的场景是我有Web Api方法,我希望使用RestSharp进行集成测试。 但是,RestSharp正在获取我的登录页面,而不是调用的结果。 [Authorize] public Item GetItem([FromBody] int id) { return service.GetItem(id); } 该产品使用自定义登录系统,我真正想要的是一种只为集成测试禁用[授权]徽章的方法。 但是我读到你可以允许匿名用户,它会“禁用”徽章,所以在解决方案中,我有一个集成测试项目,在那个项目中我有一个App.config文件。 在那个文件中,我把: 但这似乎也不起作用。 任何有关正在发生的事情的解释,为什么它不起作用以及如何才能使这项工作将不胜感激。 我试图设置一个Thread.CurrentPrincipal但是没有用(也许我做错了 – 你能在代码中设置“任何”授权吗?)。 如果有帮助,则在httpmodule中处理身份validation。

使用Postman进行ASP.NET Web API授权

我创建了一个ASP.NET Web API并将Authorize属性应用于API控制器。 现在,我想使用Postman测试它,但我收到了授权错误。 控制器代码是: [Authorize] [HttpPost] public IHttpActionResult Attend([FromBody] int gigId) { var attendance = new Attdendance { GigId = gigId, AttendeeId = User.Identity.GetUserId() }; _context.Attdendances.Add(attendance); _context.SaveChanges(); return Ok(); } 我的请求看起来像http://prntscr.com/c8wz0b 我正在使用这个先进的Postmanrest客户端http://prntscr.com/c8xafd 我如何通过Postman授权?

如何将对象列表作为IHttpActionResult返回?

我是ASP.NET webapi的新手,我找不到返回id查询对象列表的方法。 这是GET请求的控制器方法。 我想返回所有通过url传递指定问卷的问题。 我试过这个: // GET: api/Questions/5 [ResponseType(typeof(List))] public Task GetQuestion(int questionnaireId) { var questions = from q in db.Questions where q.QuestionnaireId == questionnaireId select new Question() { Id = q.Id, ImageLink = q.ImageLink, QuestionnaireId = q.QuestionnaireId, Text = q.Text }; return questions; } 这是我的问题类: public class Question { public int Id { get; […]

如何解密Web API 2 JWT令牌?

我正在尝试使用OAuth bearer令牌Web API 2供应,但我不知道如何解密它们或获取数据。 我真正想要做的是找到或写自己的这个Google工具的等效工具https://developers.google.com/wallet/digital/docs/jwtdecoder我从Web API获得的令牌。 Google工具允许您粘贴表示JWT令牌的文本字符串,然后将其拆分并取消对JSON内的JSON编码。 在Visual Studio 2013中,如果选择“新建ASP.NET项目”,然后选择具有单个用户帐户的Web API模板,则会获得包含令牌端点的示例项目。 如果您启动项目,则可以在内置的Web服务器上将请求“grant_type = password&username = joe&password = joe”发送到/ token,然后您将获得一个令牌: { “access_token”:”x3vHm40WUXBiMZi_3EmdmCWLLuv4fsgjsg4S5Ya8kppDY_-2ejn7qF5Y_nbQ0bYVIKl6MNzL2GtXv-MAuwjippAAv5VDaxoKdxEVxeFrQ_eXsKNaQK7IvmVs1rIZ9eeRfRGK2AQ59wWQcyTtYO0dPJx9K7PGrSKz4ADAZ9SEZqQ4IesVhYbRCwToyxoyU5L9qdU8jXdHumkIrULRQhf68rIaBrEA_Be-V0rzWJ644fRLvv3z69XoHs3Az7PineILyNwbDck9uU2jkaXnwxoCTa4qlK8bR-lEI9-VXPNdbCvfgb5H9wfYsJcw2CMzNxNhV8v9YVZEt90evylwtTCEpXq4T3zRCQvrpbCvZrXqJ8uvlFeqCsvvhlIkSfPhBY8nm2ocWtBGPZm58zLe5FMi1jept0B54U38ZxkZlrGQKar47jkmnc6gpLrkpDBp7cWz”, “token_type”:”bearer”, “expires_in”:1209599, “userName”:”joe”, “.issued”:”Fri, 01 Aug 2014 16:16:02 GMT”, “.expires”:”Fri, 15 Aug 2014 16:16:02 GMT” } 我想知道的是access_token所处的格式以及包含的信息。 我发现的一个线索是:您可以通过在Startup.Auth.cs中设置OAuthAuthorizationServerOptions.AccessTokenFormat属性来选择Web API使用的令牌类型。 OAuthAuthorizationServerOptions的文档说: “用于保护访问令牌中包含的信息的数据格式。如果应用程序未提供,则默认数据保护提供程序依赖于主机服务器.ISO上的SystemWeb主机将使用ASP.NET机器密钥数据保护,以及HttpListener和其他自托管服务器将使用DPAPI数据保护。如果分配了不同的访问令牌提供程序或格式,则必须将兼容实例分配给资源服务器的OAuthBearerAuthenticationOptions.AccessTokenProvider或OAuthBearerAuthenticationOptions.AccessTokenFormat属性。 所以它可能使用MachineKey进行编码。 没关系,我可以设置机器密钥,但如果我知道创建了令牌的机器密钥,我该如何解密呢?

Odata没有找到NavigationLink工厂

我目前正在开发mvc4 web api odata服务,我希望返回用户列表中的用户列表。 当我想获得用户时,我收到以下错误: 错误: The ‘ObjectContent`1’ type failed to serialize the response body for content type ‘application/json; charset=utf-8’. System.InvalidOperationException No NavigationLink factory was found for the navigation property ‘Languages’ from entity type ‘MvcWebRole1.Models.User’ on entity set ‘Users’. Try calling HasNavigationPropertyLink on the EntitySetConfiguration. Parameter name: navigationProperty System.ArgumentException at System.Web.Http.OData.Builder.EntitySetLinkBuilderAnnotation.BuildNavigationLink(EntityInstanceContext instanceContext, IEdmNavigationProperty navigationProperty, ODataMetadataLevel […]

HttpClient和PushStreamContent

我使用PushStreamContent和我的REST API(ASP.NET Web API)并且效果很好。 HttpClient可以请求资源并在服务器处理完整请求之前获取HTTP响应(服务器仍然写入推送流)。 作为HttpClient,你必须做一件小事:使用HttpCompletionOption.ResponseHeadersRead。 现在我的问题:是否有可能以另一种方式? 从HttpClient – >通过push-stream将数据上传到web api? 我在下面实现了它,但是web api在客户端关闭流之前没有收到请求。 var asyncStream = new AsyncStream(fs); PushStreamContent streamContent = new PushStreamContent(asyncStream.WriteToStream); content.Add(streamContent); HttpResponseMessage response = await c.SendAsync(new HttpRequestMessage(new HttpMethod(“POST”), “http://localhost/…”) { Content = content }, HttpCompletionOption.ResponseHeadersRead); response.EnsureSuccessStatusCode(); AsyncStream是我的代表类: public async void WriteToStream(Stream outputStream, HttpContent content, TransportContext context) 这对于Push-Stream是必要的。 这有可能吗? 在将最后一个字节写入流之前,HttpClient不会将请求发送到Web api … 我需要做什么? […]

请求/响应记录的响应正文

我正在尝试编写一个Owin midleware组件,它将记录每个传入的请求和对数据库的响应。 这是我设法得到多远。 我被困在阅读回复。 说: Stream不支持阅读。 我如何阅读Response.Body? public class LoggingMiddleware : OwinMiddleware { private static Logger log = LogManager.GetLogger(“WebApi”); public LoggingMiddleware(OwinMiddleware next, IAppBuilder app) : base(next) { } public override async Task Invoke(IOwinContext context) { using (var db = new HermesEntities()) { var sw = new Stopwatch(); sw.Start(); var logRequest = new log_Request { Body […]

ASP NET Web API中的路由 – 适用于不同版本的API

我正在从这里阅读Attribute Routing in Web API 2 文章说, Here are some other patterns that attribute routing makes easy. API versioning In this example, “/api/v1/products” would be routed to a different controller than “/api/v2/products”. /api/v1/products /api/v2/products 怎么会? 编辑:我会在正常路由中执行此操作: public static class WebApiConfig { public static void Register(HttpConfiguration config) { config.Routes.MapHttpRoute( name: “DefaultApi”, routeTemplate: “api/v2/products”, defaults: new { […]