Tag: asp.net web api

ASP.NET Web API的不同返回类型

我正在尝试使用ASP.NET MVC 4 Web API在HTTP上编写真正的RESTful Web服务。 我目前面临的挑战是根据我的状态代码返回不同的返回类型(entity-body)。 例如,对于资源Hammer,我有一个.NET模型类“Hammer”和一个HammerController: namespace Awesomeness { public class HammerController : ApiController { public Hammer Get(int id) { } … 如果ID不存在(404)或需要不同的授权(401),我可以轻松地快速返回并手动设置状态代码和任何其他内容,这很酷。 但是,在许多非2xx状态中,我想返回一个与Hammer资源表示不同的实体。 我可以轻松地手动执行此操作,但我希望根据请求标头利用ASP.NET MVC 4 Web API自动序列化和反序列化到XML或JSON。 所以我的核心问题是:我可以利用ASP.NET MVC 4 Web API的自动序列化同时返回不同的返回类型吗? 我想到的一些潜在方法是: 让控制器方法返回主资源类型,但用HttpContext.Current.Response短路返回并以某种方式挂钩到自动序列化(首选)。 让我的Model类更像是一个C union,它表示这种类型或那种类型,并让它作为正常返回过程的一部分进行序列化(并且只需覆盖状态代码和所需的任何响应头)。 即使我想通过如何做到这一点,我仍然觉得它最终会变得非常黑客。 编辑2012年4月27日:我可以像这样抛出一个HttpResponseException: HttpResponseMessage response = new HttpResponseMessage(statusCode); if (!string.IsNullOrWhiteSpace(text)) { response.Content = new StringContent(text); } […]

使用web api HttpResponseMessage输出图像

我正在尝试以下代码从asp.net web api输出图像,但响应体长度始终为0。 public HttpResponseMessage GetImage() { HttpResponseMessage response = new HttpResponseMessage(); response.Content = new StreamContent(new FileStream(@”path to image”)); response.Content.Headers.ContentType = new MediaTypeHeaderValue(“image/jpeg”); return response; } 有小费吗? 作品: [HttpGet] public HttpResponseMessage Resize(string source, int width, int height) { HttpResponseMessage httpResponseMessage = new HttpResponseMessage(); // Photo.Resize is a static method to resize the image Image image […]

Web Api 2会话

我无法在web api 2中获取会话数据。我已经validation了cookie是在fiddler中发送的。 我知道web api 2最佳实践是无状态,但由于对项目的要求,现在必须满足状态。 我试过这个链接。 WebAPI 2属性路由启用会话状态 var session = SessionStateUtility.GetHttpSessionStateFromContext(HttpContext.Current) 通过上面的解决方案,我在该函数上获得了一个nullexception。 我还尝试通过修改路由中的请求处理程序,以旧方式api中的方式复制这种方式,但这在web api 2中不可用。 我目前在mvc5中设置了一些会话变量。 这工作和会话保持不变,但无论何时我在web api 2中尝试使用会话,下面都是null。 HttpContext.Current.Session

返回HttpResponseMessage的Web API最佳方法

我有一个Web API项目,我的方法总是返回HttpResponseMessage 。 所以,如果它工作或失败我返回: 没有错误: return Request.CreateResponse(HttpStatusCode.OK,”File was processed.”); 任何错误或失败 return Request.CreateResponse(HttpStatusCode.NoContent, “The file has no content or rows to process.”); 当我返回一个对象然后我使用: return Request.CreateResponse(HttpStatusCode.OK, user); 我想知道如何向HTML5客户端返回更好的封装respose,以便我可以返回有关事务的更多信息等。 我在考虑创建一个可以封装HttpResponseMessage但也有更多数据的自定义类。 有没有人实现类似的东西?

使用.NET Core的Firebase身份validation(JWT)

我正在开发一个处理Firebase身份validation的简单API – 稍后将用于Android客户端。 所以在Firebase控制台中,我启用了Facebook和Google登录方法,并创建了一个示例html页面,我可以使用它来测试登录方法 – 下一个函数由按钮调用: function loginFacebook() { var provider = new firebase.auth.FacebookAuthProvider(); var token = “”; firebase.auth().signInWithPopup(provider).then(function (result) { var token = result.credential.accessToken; var user = result.user; alert(“login OK”); user.getToken().then(function (t) { token = t; loginAPI(); }); }).catch(function (error) { var errorCode = error.code; var errorMessage = error.message; alert(errorCode + ” – ” […]

使用x-www-form-urlencoded发布数据的ASP.Net Web API自定义模型绑定 – 似乎没什么用

发布x-www-form-urlencoded数据时,我在定制模型绑定时遇到了很多麻烦。 我已经尝试过各种我能想到的方式,似乎没有任何东西可以产生预期的结果。 注意发布JSON数据时,我的JsonConverters等都可以正常工作。 当我发布为x-www-form-urlencoded ,系统似乎无法弄清楚如何绑定我的模型。 我的测试用例是我想将TimeZoneInfo对象绑定为我的模型的一部分。 这是我的模型活页夹: public class TimeZoneModelBinder : SystemizerModelBinder { protected override object BindModel(string attemptedValue, Action addModelError) { try { return TimeZoneInfo.FindSystemTimeZoneById(attemptedValue); } catch(TimeZoneNotFoundException) { addModelError(“The value was not a valid time zone ID. See the GetSupportedTimeZones Api call for a list of valid time zone IDs.”); return null; } } } […]

Autofac RegisterInstance与SingleInstance

IProductRepositoryProxy ProductDataServiceProviderInstance = new ServiceProductDataProvider(); builder.RegisterInstance(ProductDataServiceProviderInstance).As(); VS builder.RegisterType().As().InstancePerRequest(); 我在这里看到了前雇员的代码,并想知道这个人是否想要注册一个.SingleInstance()行为。 builder.RegisterType().As().SingleInstance(); 使用RegisterInstance的ServiceProductDataProvider的手动新增与Register .SingleInstance()不同吗?

ASP.NET Web API从模型 – 帮助页面生成所有参数

我正忙着创建Web API(在asp mvc4应用程序中)。 我正在使用asp.net网站上建议的库来生成文档( http://www.asp.net/web-api/overview/creating-web-apis/creating-api-help-pages )。 我的问题是,如果我的参数是模型,那么我无法在生成的帮助页面中指定模型包含的属性。 这是一个例子: 模型: public class TestModel { property String FirstName {get;set;} property String Surname {get; set;} property Boolean Active {get;set;} } 行动: /// /// This is a test action /// /// this is the model <– this works /// This is the first name <– doesn't work /// This […]

同一解决方案中的MVC和Web Api项目

我有一个MVC 4项目坐在N层应用程序的顶部。 我现在要求能够以编程方式使用应用程序。 我在同一个解决方案中创建了一个新的Web Api项目,它位于MVC项目的旁边,再次位于N层应用程序的顶部。 但我不清楚这一切是如何起作用的,因为MVC层是启动项目:它设置我的DI,自动播放器等,并且是我部署到服务器的项目。 那么这一切应该怎么设置呢? 我可以设置我的MVC项目来将所有/ api请求路由到新的Web Api项目吗? 或者Web Api项目是否需要单独部署? 我不想做任何非常规的事情,所以如果有更常见的方式来设置这个,请指出我正确的方向。 谢谢。

如何使ASP.NET Web API与版本控制和帮助页面扩展一起使用?

我已经在我的WebAPI应用程序中实现了一个版本控制框架,并且非常希望能够使用Microsoft的新帮助页面扩展。 Microsoft.AspNet.WebApi.HelpPage SDammann.WebApi.Versioning 很简单,我不知道如何让他们两个一起工作。 我有2个项目: AdventureWorks.Api(主要主机/根应用程序) AdventureWorks.Api.v1(包含API的第一个版本的类库) 版本控制按预期工作。 我已经尝试在根应用程序上安装HelpPage包,当我浏览到帮助页面时,似乎没有找到任何控制器。 在内部我相信它使用: Configuration.Services.GetApiExplorer().ApiDescriptions 这不会返回任何结果,因此我收到错误。 任何人都可以协助我让这两个包一起工作吗? 编辑:在开始时,我不确定这是一个路由问题,但最近的评论似乎暗示。 这是我的RouteConfig.cs public class RouteConfig { public static void RegisterRoutes(RouteCollection routes) { routes.IgnoreRoute(“{resource}.axd/{*pathInfo}”); routes.MapHttpRoute( name: “SldExportAliasApi”, routeTemplate: “api/v{version}/sld-export/{id}”, defaults: new { id = RouteParameter.Optional, controller = “Export” } ); routes.MapHttpRoute( name: “LinkRoute”, routeTemplate: “api/v{version}/link/{system}/{deployment}/{view}”, defaults: new { controller = “Link” } ); […]