Tag: asp.net web api

在ASP.Net Web Api 2中使用PUT动词上传文件

我想使用HTTP PUT动词公开ASP.Net Web Api 2动作来上传文件。 这与我们的REST模型一致,因为API代表远程文件系统(类似于WebDAV,但实际上是简化的),因此客户端选择资源名称(因此PUT是理想的,POST不是一个合理的选择)。 Web Api文档描述了如何使用multipart / form-data表单上载文件 ,但没有描述如何使用PUT方法执行此操作。 您将使用什么来测试这样的API(HTML多部分表单不允许PUT动词)? 服务器实现是否类似于web api文档中描述的多部分实现(使用MultipartStreamProvider ),或者应该如下所示: [HttpPut] public async Task PutFile(string resourcePath) { Stream fileContent = await this.Request.Content.ReadAsStreamAsync(); bool isNew = await this._storageManager.UploadFile(resourcePath, fileContent); if (isNew) { return this.Request.CreateResponse(HttpStatusCode.Created); } else { return this.Request.CreateResponse(HttpStatusCode.OK); } }

Web Api不会使用jQuery Ajax和Basic Auth下载文件

我正在使用ASP.NET Web API构建Web服务(和站点)的原型,该原型具有下载文件的方法。 当前端的用户按下导出按钮时,控制器发出并接收jQuery ajax GET请求,然后控制器调用名为Excel的方法(如下所示)。 该方法运行没有任何问题并完成。 当我在标题中查看Chrome时(请参阅https://skydrive.live.com/redir?resid=2D85E5C937AC2BF9!77093 ),它会收到响应(据我所知)所有正确的标题。 我正在使用Basic Auth,因此使用http授权头传输用户凭据,我已使用Ajax选项手动将其添加到每个jQuery Ajax请求中。 var excelRequest = $.ajax({ url: ‘http://localhost:59390/api/mycontroller/excel’, cache: false, type: ‘GET’, data: gridString, dataType: ‘json’, contentType: ‘application/json; charset=utf-8’ }); $.ajaxSetup({ beforeSend: function (xhr) { SetAuthRequestHeader(xhr) } }); function SetAuthRequestHeader(jqXHR) { var usr = “Gebruiker2”; // TODO: Change, this is for testing only. var pw […]

ASP.NET Web API 2具有Task.Run性能的异步操作方法

我正在尝试使用几个ASP.NET Web API 2.0端点进行基准测试(使用Apache工作台)。 其中一个是同步和一个异步。 [Route(“user/{userId}/feeds”)] [HttpGet] public IEnumerable GetNewsFeedItemsForUser(string userId) { return _newsFeedService.GetNewsFeedItemsForUser(userId); } [Route(“user/{userId}/feeds/async”)] [HttpGet] public async Task<IEnumerable> GetNewsFeedItemsForUserAsync(string userId) { return await Task.Run(() => _newsFeedService.GetNewsFeedItemsForUser(userId)); } 在观看Steve Sanderson的演讲之后,我向每个端点发出了以下命令ab -n 100 -c 10 http://localhost…. 我很惊讶,因为每个端点的基准测试似乎大致相同。 关闭史蒂夫解释说我期待异步端点更高效,因为它会立即将线程池线程释放回线程池,从而使它们可用于其他请求并提高吞吐量。 但数字看起来完全一样。 我在这里误解了什么?

如何在客户端获取DotNetOpenAuth.OAuth2返回的错误消息?

我正在使用ExchangeUserCredentialForToken函数从授权服务器获取令牌。 当我的用户存在于我的数据库中时,它工作正常,但是当凭据是incorect时,我想向客户端发回消息。 我正在使用以下2行代码来设置错误消息: context.SetError(“Autorization Error”, “The username or password is incorrect!”); context.Rejected(); 但在客户端,我只得到协议错误(错误400)。 您能帮我解决一下如何在授权服务器上获取服务器端设置的错误消息? 来自授权服务器的完整应用程序配置: using Constants; using Microsoft.Owin; using Microsoft.Owin.Security; using Microsoft.Owin.Security.Cookies; using Microsoft.Owin.Security.Infrastructure; using Microsoft.Owin.Security.OAuth; using Owin; using System; using System.Collections.Concurrent; using System.Linq; using System.Security.Claims; using System.Security.Principal; using System.Threading.Tasks; using AuthorizationServer.Entities; using AuthorizationServer.Entities.Infrastructure.Abstract; using AuthorizationServer.Entities.Infrastructure.Concrete; namespace AuthorizationServer { public partial class Startup { […]

如何在Visual Studio 2012上配置或设置带有ASP.NET(包含MVC)C#的Log4Net

我想将软件进程日志记录到文件中。 我试图将Log4Net与ASP.NET MVC一起使用,而不是制作我自己的日志系统,但我在Visual Studio 2015中设置它时遇到了问题,如: 如何设置web.config / Global.asax页面? 如何在VS 2012中安装组件〜? 如何在我的*.cs文件中使用它? 在Visual Studio 2015中使用ASP.NET MVC C#正确配置Log4Net的步骤是什么? 我还写了一个问答来为ASP.NET WebForms设置它,参见如何在ASP.NET Web窗体中使用Nuget和Visual Studio平台的Log4net(简单方法) 。

停止url编码cookie

考虑以下ASP.net web api控制器方法。 出于演示目的,它返回一个cookie。 session-id cookie具有base64编码数据。 当我使用response.Headers.AddCookies(new CookieHeaderValue[] { cookie });将cookie添加到响应中时response.Headers.AddCookies(new CookieHeaderValue[] { cookie }); 它url对数据进行编码(文档在这里 )。 我有没有办法在没有编码的情况下附加cookie? public HttpResponseMessage LogMeIn() { var response = Request.CreateResponse(new Models.UserAuthResponse()); var cookie = new CookieHeaderValue(“session-id”, “K2QRkQaSnwCBpRrAgI1K3w9kTgbArc+xdIJI64e2hz0=”); cookie.Expires = DateTimeOffset.Now.AddDays(1); cookie.Domain = “.example.com”; cookie.Path = “/”; response.Headers.AddCookies(new CookieHeaderValue[] { cookie }); return response; }

unit testing时HttpContext.Current为null

我有以下web Api控制器方法。 当我通过web运行此代码时, HttpContext.Current never null并给出所需的值。 public override void Post([FromBody]TestDTO model) { var request = HttpContext.Current.Request; var testName = request.Headers.GetValues(“OS Type”)[0]; // more code } 但是,当我从Unit Test调用此方法时, HttpContext.Current is always null. 我如何解决它?

如何在entity framework中处理System.InvalidOperationException?

我是asp.net web API的新手。 我已经制作了一个function,应该validation用户前端发​​送数据,然后我搜索数据库中的数据。 但是当找不到帐户时,我总是得到一个例外,我应该如何处理该exception以发送到前端信息,当第一个if语句不为真时,我应该返回什么,因为null剂量不起作用。 public UserData ByPassword(string emailAddress, string password) { if (emailAddress != null && password != null) { Account account = db.Accounts.Where(acc => acc.AccMail == emailAddress && acc.AccPassword == password.ToLower()).Single(); string token = OurAuthorizationAttribute.CreateTicket(account.AccID, false); UserData data = new UserData(); data.Id = account.AccID; data.Token = token; return data; } 她还添加了try和catch块,但仍然是同样的问题。 public UserData […]

ASP Web API帮助页面 – 从XML 标记链接到类

我正在开发一个Web-API项目,我对微软的HelpPages自动生成的文档印象非常深刻。 我使用官方网站创建帮助页面启用自定义文档 文档生成成功但是标签中的类的引用似乎都没有添加到描述中,HelpPages只是忽略它们(这是有原因的)。 我真的很想在我的项目中使用这个function,我搜索了很多(有时候很近),但没有一个给出令人信服的答案。 这就是为什么我决定将我的解决方案发布到这个调整,并希望有利于其他程序员,并节省他们一些时间和精力。 (我的回答在下面的回复中)

httpclient调用webapi发布数据不起作用

我需要使用字符串参数对post方法进行简单的webapi调用。 下面是我正在尝试的代码,但是当在webapi方法上遇到断点时,接收的值为null 。 StringContent stringContent = new System.Net.Http.StringContent(“{ \”firstName\”: \”John\” }”, System.Text.Encoding.UTF8, “application/json”); HttpClient client = new HttpClient(); HttpResponseMessage response = await client.PostAsync(url.ToString(), stringContent); 和服务器端代码: // POST api/values [HttpPost] public void Post([FromBody]string value) { } 请帮忙…