Tag: asp.net web api

HttpResponseMessage的内容为JSON

我有一个ASP.NET MVC WEB API。 由于多种原因(由于没有授权而重定向..),我不能只使用一个简单的对象并在我的控制器方法中返回它。 因此我需要HttpResponseMessage类,它允许我重定向。 目前我这样做: var response = new Response { responseCode = Response.ResponseCodes.ItemNotFound }; var formatter = new JsonMediaTypeFormatter(); response.Content = new ObjectContent(response, formatter, “application/json”); ..将序列化为JSON的对象放入HttpResponseMessage的内容中。 不知何故,我觉得有另一种更好的方法可以做到这一点。 有什么想法吗?

你如何在ASP 5(vnext)中抛出HttpResponseException

我正在ASP 5中编写一个api控制器。如果传递给服务的参数不正确,我想返回一个错误的请求代码exception。 在当前版本的webapi中,我会这样做: throw new HttpResponseException(HttpStatusCode.BadRequest); 但是HttpResponseException是System.Web一部分,它已从ASP 5中删除,因此我无法再实例化它。 在vNext中执行此操作的正确方法是什么?

使用Web API和JSON.NET序列化对象时,防止$ id / $ ref

在序列化对象时,我似乎无法阻止Web API / JSON.NET使用Newtonsoft.Json.PreserveReferencesHandling.Objects 。 换句话说,尽管使用了以下设置,但$ id / $ ref总是在序列化对象中使用: public class MvcApplication : System.Web.HttpApplication { protected void Application_Start () { WebApiConfig.Register(GlobalConfiguration.Configuration); } } public static class WebApiConfig { public static void Register (HttpConfiguration config) { JsonMediaTypeFormatter jsonFormatter = config.Formatters.OfType().Single(); jsonFormatter.UseDataContractJsonSerializer = false; jsonFormatter.SerializerSettings.Formatting = Newtonsoft.Json.Formatting.Indented; jsonFormatter.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore; jsonFormatter.SerializerSettings.PreserveReferencesHandling = Newtonsoft.Json.PreserveReferencesHandling.None; } } 有任何想法吗?

在Owin启动期间,Simple Injector无法为每个Web API请求注册类注入

我正在使用Owin,Web API,entity framework,ASP.NET身份创建API。 我使用Simple Injector作为我选择的DI框架。 在Owin启动过程中,我想用一些示例数据为我的数据库建立种子。 这是由实现IDatabaseInitializer的类处理的,它看起来像这样: public class MyDbInitializer : DropCreateDatabaseAlways { private readonly IUserManager _userManager; public MyDbInitializer(IUserManager userManager) { _userManager = userManager; } protected override void Seed(MyDataContext context) { SeedIdentities(); } private void SeedIdentities() { var user = new User { UserName = “someUsername”, Email = “some@email.com” }; _userManager.CreateAsync(user, “Password”); } IUserManager是ASP.NET Identiy […]

如何防止ReadAsStringAsync返回双重转义的字符串?

我有一个Web API方法,看起来有点像这样: [HttpPost] public ResponseMessageResult Post(Thing thing) { var content = “\r”; var httpResponseMessage = Request.CreateResponse(HttpStatusCode.Accepted, content); return ResponseMessage(httpResponseMessage); } 在其他一些客户端代码中,当我打电话时: var content = httpResponseMessage.Content.ReadAsStringAsync().Result; content是: “\\r” 但我希望它保持原状: “\r” 为什么客户端收到双重转义的字符串,我该如何防止它发生?

控制器上的多个路由

想知道是否有可能有多个路由指向WebApi控制器? 例如,我想同时将http:// domain / calculate和http:// domain / v2 / calculate指向同一个控制器函数?

在ASP.NET Core Web API中注册新的DelegatingHandler

我想创建一个新的Handler,它扩展了DelegatingHandler,使我能够在进入控制器之前做一些事情。 我已经在各个地方读过我需要从DelegatingHandlerinheritance,然后像这样覆盖SendAsync(): public class ApiKeyHandler : DelegatingHandler { protected override Task SendAsync(HttpRequestMessage request, CancellationToken cancellationToken) { // do custom stuff here return base.SendAsync(request, cancellationToken); } } 这一切都很好,花花公子除了它没有做任何事情,因为我没有在任何地方注册! 我再次在很多地方看到我应该在WebApiConfig.cs中这样做,但这不是Web API的ASP.NET 核心版本的一部分。 我试图找到类似于Startup.cs文件(Configure(),ConfigureServices()等)中的各种东西,但没有运气。 谁能告诉我如何注册我的新处理程序?

Web API可选参数

我有一个带有以下签名的控制器: [Route(“products/filter/{apc=apc}/{xpc=xpc}/{sku=sku}”)] public IHttpActionResult Get(string apc, string xpc, int? sku) { … } 我用以下URI调用此方法: 〜/ API /产品/过滤?APC = AA&XPC = BB 〜/ API /产品/过滤?SKU = 7199123 第一个URI没有问题。 第二个有一个奇怪的副作用。 即使apc和xpc的默认值在未提供时应为null,但参数实际上是它们的名称。 我可以通过添加额外的逻辑来克服这个问题: apc = (apc == “apc”) ? null : apc; xpc = (xpc == “xpc”) ? null : xpc; 这似乎是一个黑客攻击,如果传递的值等于参数名称,则会出现问题。 有没有办法定义路线没有这种副作用?

Fiddler测试API Post传递类

我有一个名为“TestController”的非常简单的C#APIController,其API方法如下: [HttpPost] public string HelloWorld([FromBody] Testing t) { return t.Name + ” ” + t.LastName; } 联系人只是一个类似于以下的类: public class Testing { [Required] public string Name; [Required] public string LastName; } 我的APIRouter看起来像这样: config.Routes.MapHttpRoute( name: “TestApi”, routeTemplate: “api/{controller}/{action}/{id}”, defaults: new { id = RouteParameter.Optional } ); 问题1 : 如何从C#客户端测试? 对于#2,我尝试了以下代码: private async Task TestAPI() { var pairs […]

MultipartMemoryStreamProvider:filename?

我已经在这里问过如何在不需要保存的情况下在Web Api中读取上传的文件。 使用MultipartMemoryStreamProvider回答了这个问题,但是如何使用此方法获取文件名以从中派生上传文件的类型? 亲切的问候