Articles of asp.net web api

为什么auth中间件声明的顺序在Owin Startup类中很重要?

我读了一些关于在使用web api时在owin管道中设置身份validation的示例( 1,2,3,4) ,并且示例将身份validation中间件声明为Configuration方法中的第一个中间件,但没有告诉它为什么需要第一。 在这个问题中,作者在认证中间件之前附加了webapi中间件,然后认证无法正常工作。 当auther将它移动到方法的顶部时,一切都按预期工作。 有谁知道为什么需要将身份validation中间件添加为启动配置方法中的第一个中间件?

在WebAPI操作方法中抛出HttpResponseException,返回空200响应

我正在尝试从我的应用程序返回适当的Http代码和响应,但我正在努力。 似乎有两种方法可以返回特定的http响应。 我想要处理的方法是抛出一个HttpResponseException : public Information Get(int apiKey) { if (!_users.Authenticate(apiKey)) { var response = new HttpResponseMessage(); response.StatusCode = (HttpStatusCode)401; response.ReasonPhrase = “ApiKey invalid”; throw new HttpResponseException(response); } return _info.Get(); } 但是,当我这样做时,我看到的响应只是一个空的200响应! 您似乎也可以更改操作方法的签名以返回HttpResponseMessage如下所示: public HttpResponseMessage Get() { if (!_users.Authenticate(apiKey)) { return Request.CreateResponse((HttpStatusCode) 401, “ApiKey invalid”); } return Request.CreateResponse((HttpStatusCode) 200, _info.Get()); } 我真的不想这样做,如果我可以帮助它,我宁愿让我的返回类型作为我试图检索的对象,而不是每次在HttpResponseMessage包装它。 有没有理由为什么第一个方法返回一个空的200而不是401我想要它的消息?

Web Api请求在将内容复制到流时会出现“错误”。

我正在尝试实现此代码示例 ,但获取HttpRequestException – “ 将内容复制到流时出错 ”。 调用ReadAsStringAsync()方法时。 内部exception是“ 无法访问已处置的对象” 。 我正在使用Fiddler提出请求。 我不明白。 有人可以解释为什么我得到这个例外并提供解决方案吗? Web Api方法: public async Task Post(HttpRequestMessage request) { try { var jsonString = await request.Content.ReadAsStringAsync(); } catch (Exception ex) { throw; } return new HttpResponseMessage(HttpStatusCode.Created); } 提琴手(POST): User-Agent: Fiddler Host: localhost:23567 Content-Length: 18 Content-Type: application/json; charset=utf-8 Body{“Test”:1} 编辑: 我有一个线索,但需要validation。 在Web Api控制器上,我有一个ActionFilterAttribute ,在其OnActionExecuting覆盖中,有这一行: […]

你能在控制器中使用generics方法吗?

是否可以在控制器中使用通用方法? 我在谈论这样的事情: [HttpPost] public void DoSomething([FromBody] SomeGenericClass someGenericObject) { SomePrivateMethod(someGenericObject); } 我实际上已经尝试了上面的内容(虽然所有内容都有不同的名称)并且在请求正文中使用someGenericObject的实例发布到Api//DoSomething ,但它不起作用(即它没有到达控制器)。 我猜测Web API路由无法解析generics方法,因为它们可能导致下面不同类型的不同方法。 但这就是我的想法。 那么,是否可以在控制器中使用通用方法? 如果有,怎么样? 如果没有,为什么?

使用带有备用内容类型的c#web api

我是web api的新手,我需要为客户端创建一个服务器。 我无法控制客户端 – 无法改变一件事。 客户端在POST主体中发送html封装的json请求。 但是,内容类型可能会有所不同。 我需要做什么才能让我的ApiController处理不同的内容类型?

webapi2中DataMember和JsonProperty之间的区别

在webapi2中使用DataMember和JsonProperty有什么区别? 任何性能差异? 什么是首选使用? 谢谢! 安德烈亚斯

如何解析MultipartFormDataContent

我正在编写一个Web API服务,我想接受一个文件(图像)和一个包含图像关键信息的序列化对象(JSON)。 没有图像部分的问题但是当我添加包含反序列化对象的字符串内容时,我在尝试确定哪个是哪个并且相应地采取行动时遇到问题。 客户端代码如下所示: HttpClient client = new HttpClient(); MultipartFormDataContent content = new MultipartFormDataContent(); content.Add(new StreamContent(File.Open(“c:\\MyImages\\Image00.jpg”, FileMode.Open)), “image_file”, “Image00.jpg”); ImageKeys ik = new ImageKeys { ImageId = “12345”, Timestamp = DateTime.Now.ToString() }; JavaScriptSerializer js = new JavaScriptSerializer(); if (ik != null) { content.Add(new StringContent(js.Serialize(ik), Encoding.UTF8, “application/json”), “image_keys”); } string uri = “http://localhost/MyAPI/api/MyQuery/TransferFile”; var request = […]

validation在unit testing中失败

我正在运行PostMyModel路线的unit testing。 但是,在PostMyModel()我使用了行Validate(model)来更改模型后重新validation我的模型。 我正在使用测试上下文,以便不依赖于unit testing的数据库。 我在下面发布了测试上下文和post方法: 测试环境 class TestAppContext : APIContextInterface { public DbSet MyModel { get; set; } public TestAppContext() { this.MyModels = new TestMyModelDbSet(); } public int SaveChanges(){ return 0; } public void MarkAsModified(Object item) { } public void Dispose() { } } 发布方法 [Route(“”), ResponseType(typeof(MyModel))] public IHttpActionResult PostMyModel(MyModel model) { //Save model […]

运行代码第一次迁移update-database时出错

我无法迁移到我的数据库,我似乎找不到我得到的错误的答案 System.MissingMethodException: Method not found: ‘System.Data.Entity.Migrations.Builders.TableBuilder`1 System.Data.Entity.Migrations.Builders.TableBuilder`1.Index(System.Linq.Expressions.Expression`1>, Boolean, Boolean, System.Object)’. at Evento.Migrations.initialcreate.Up() at System.Data.Entity.Migrations.DbMigrator.ApplyMigration(DbMigration migration, DbMigration lastMigration) at System.Data.Entity.Migrations.Infrastructure.MigratorLoggingDecorator.ApplyMigration(DbMigration migration, DbMigration lastMigration) at System.Data.Entity.Migrations.DbMigrator.Upgrade(IEnumerable`1 pendingMigrations, String targetMigrationId, String lastMigrationId) at System.Data.Entity.Migrations.Infrastructure.MigratorLoggingDecorator.Upgrade(IEnumerable`1 pendingMigrations, String targetMigrationId, String lastMigrationId) at System.Data.Entity.Migrations.DbMigrator.UpdateInternal(String targetMigration) at System.Data.Entity.Migrations.DbMigrator.c__DisplayClassc.b__b() at System.Data.Entity.Migrations.DbMigrator.EnsureDatabaseExists(Action mustSucceedToKeepDatabase) at System.Data.Entity.Migrations.Infrastructure.MigratorBase.EnsureDatabaseExists(Action mustSucceedToKeepDatabase) at System.Data.Entity.Migrations.DbMigrator.Update(String targetMigration) at System.Data.Entity.Migrations.Infrastructure.MigratorBase.Update(String targetMigration) at System.Data.Entity.Migrations.Design.ToolingFacade.UpdateRunner.Run() […]

如何在Web API授权属性中获取请求cookie?

在.NET中有两个AuthorizeAttribute类。 一个在System.Web.Http命名空间中定义的: namespace System.Web.Http { // Summary: // Specifies the authorization filter that verifies the request’s System.Security.Principal.IPrincipal. [AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, Inherited = true, AllowMultiple = true)] public class AuthorizeAttribute : AuthorizationFilterAttribute { // Summary: // Initializes a new instance of the System.Web.Http.AuthorizeAttribute class. public AuthorizeAttribute(); // Summary: // Gets or sets the authorized roles. // […]