我想了解MVC 5中的单页面应用程序模板中的新OWIN承载令牌authentication过程。如果我错了,请更正我的OAuth密码客户端authenticationstream程,承载令牌authentication通过检查httpauthentication请求标头对于承载访问令牌代码来查看请求是否经过authentication,它不依赖于cookie来检查特定的请求是否被authentication。 根据这个职位: 使用Web API示例的OWIN承载令牌authentication public override async Task GrantResourceOwnerCredentials(OAuthGrantResourceOwnerCredentialsContext context) { using (IdentityManager identityManager = _identityManagerFactory.CreateStoreManager()) { if (!await identityManager.Passwords.CheckPasswordAsync(context.UserName, context.Password)) { context.SetError("invalid_grant", "The user name or password is incorrect."); return; } string userId = await identityManager.Logins.GetUserIdForLocalLoginAsync(context.UserName); IEnumerable<Claim> claims = await GetClaimsAsync(identityManager, userId); ClaimsIdentity oAuthIdentity = CreateIdentity(identityManager, claims, context.Options.AuthenticationType); ClaimsIdentity cookiesIdentity = CreateIdentity(identityManager, claims, […]
我曾经把我的控制器放到Mvc Web Api中的一个单独的类库项目中。 我曾经在我的web api项目的global.asax中添加以下行来查找单独项目中的控制器: ControllerBuilder.Current.DefaultNamespaces.Add("MyClassLibraryProject.Controllers"); 除了添加上面的行之外,我从来不需要做任何其他configuration。 这对我来说一直很好。 但是我无法使用上面的方法在WebApi2中执行相同的操作。 它只是不起作用。 WebApi2项目仍然尝试在自己的项目的控制器文件夹中find控制器。 – 在2个月后给予小小的摘要更新(当我开始赏金时): 我创build了一个WebApiOne解决scheme,它有两个项目,第一个是WebApi项目,第二个是控制器类库。 如果我将控制器类库项目的引用添加到WebApi项目中,则所有工作均按预期工作。 即如果我去http://mydevdomain.com/api/values我可以看到正确的输出。 我现在创build了第二个名为WebApiTwo的项目,它有两个项目,第一个是WebApi2项目,第二个是控制器类库。 如果我将控制器类库项目的引用添加到WebApi2项目,它不会按预期工作。 即如果我去http://mydevdomain.com/api/values我得到“没有findtypes匹配名为”价值观“的控制器。 对于第一个项目我没有做任何自定义设置,我没有: ControllerBuilder.Current.DefaultNamespaces.Add("MyClassLibraryProject.Controllers"); 在我的global.asax中,我还没有在他的两篇博文中实现StrathWeb提出的任何定制解决scheme,因为我认为它不再适用。 因为所有的工作只是通过将控制器项目的引用添加到WebApi项目中。 所以我希望所有的工作都一样的WebApi2 …但它不是。 有没有人真的想在WebAPi2中做这个?
我知道我可以使用Url.Link()获取特定路由的URL,但是如何在Web API控制器中获取Web API基本URL?
刚刚升级了一个ASP.NET MVC4项目使用Unity.WebApi版本5.0.0.0,它需要System.Web.Http v 5.0.0.0根据以下错误: Assembly 'Unity.WebApi, Version=5.1.0.0, Culture=neutral, PublicKeyToken=43da31bc42a85347' uses 'System.Web.Http, Version=5.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' which has a higher version than referenced assembly 'System.Web.Http, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' 我目前正在引用System.Web.Http v4.0,但有以下NuGet包升级到其各自的最新版本: ANTLRv3 Microsoft ASP.NET通用提供程序 Microsoft.Web.Infrastructure 微软ASP.NET MVC Microsoft ASP.NET Razor Microsoft ASP.NET通用提供程序核心库 Microsoft ASP.NET通用提供程序 Microsoft ASP.NET Web API 2客户端 微软ASP.NET Web API 2核心 Microsoft ASP.NET Web API 2 […]
我们假设这是我的行动方法 public IHttpActionResult Get(int id) { var status = GetSomething(id); if (status) { return Ok(); } else { return NotFound(); } } testing将是 var httpActionResult = controller.Get(1); 如何在此之后检查我的http状态码?
我试图按照http://enable-cors.org/server_aspnet.html上的步骤使我的RESTful API(使用ASP.NET WebAPI2实现)与跨源请求(启用CORS)一起工作。 这不工作,除非我修改web.config。 我安装了WebApi Cors依赖项: install-package Microsoft.AspNet.WebApi.Cors -ProjectName MyProject.Web.Api 然后在我的App_Start我有类WebApiConfig如下: public static class WebApiConfig { public static void Register(HttpConfiguration config) { var corsAttr = new EnableCorsAttribute("*", "*", "*"); config.EnableCors(corsAttr); var constraintsResolver = new DefaultInlineConstraintResolver(); constraintsResolver.ConstraintMap.Add("apiVersionConstraint", typeof(ApiVersionConstraint)); config.MapHttpAttributeRoutes(constraintsResolver); config.Services.Replace(typeof(IHttpControllerSelector), new NamespaceHttpControllerSelector(config)); //config.EnableSystemDiagnosticsTracing(); config.Services.Replace(typeof(ITraceWriter), new SimpleTraceWriter(WebContainerManager.Get<ILogManager>())); config.Services.Add(typeof(IExceptionLogger), new SimpleExceptionLogger(WebContainerManager.Get<ILogManager>())); config.Services.Replace(typeof(IExceptionHandler), new GlobalExceptionHandler()); } } 但之后我运行的应用程序,我请求与Fiddler的资源,如: http:// […]
首先,我将画出我的项目: 对于我的实习船,我需要为现有系统添加function。 用户通过oauth2授权后,第三方客户端必须能够访问AX Web服务中的数据。 我知道我需要做一个“代理networking服务”,客户可以在那里打他的电话,这叫做AX服务,但是我对oauth2部分有点不确定。 大多数教程和指南都是关于使用ASP.NET的Identity for Facebook或Googlelogin。 我不需要,我需要使用现有的凭据,所以我需要做我自己的oauth2服务。 我发现很难find这方面的教程,指南或解释。 我了解oauth2,需要做什么,但是我从来没有做过这样的事情,并且很难开始。 最接近我所需要的是我发现这个github回购链接 ,但解决scheme不build立。 我想到的是build立一个ASP.NET MVC网站,客户端(第三方)可以注册自己并获得他们的客户端ID。 使用ASP.NET API时,我想创build带有所需令牌和参数的API,然后访问Dyn AX服务。 这是正确的,还是我完全错了? 任何帮助或build立自己的oauth2服务器/服务的链接将是很好的。
UPDATE 感谢所有的答案。 我正在一个新的项目上,看起来终于到了这个底部了:看起来下面的代码实际上是指责: public static HttpResponseMessage GetHttpSuccessResponse(object response, HttpStatusCode code = HttpStatusCode.OK) { return new HttpResponseMessage() { StatusCode = code, Content = response != null ? new JsonContent(response) : null }; } 别处… public JsonContent(object obj) { var encoded = JsonConvert.SerializeObject(obj, Newtonsoft.Json.Formatting.None, new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore } ); _value = JObject.Parse(encoded); Headers.ContentType = […]
我试图让工作的url是: http ://somedomain.com/api/people/staff.33311(就像LAST.FM这样的网站允许在他们的RESTFul和网页url上的各种标志,例如“ http://www.last.fm/artist/psy'aviah ”是LAST.FM的有效url)。 什么工程是以下scheme: – http://somedomain.com/api/people/ – 返回所有的人 – http://somedomain.com/api/people/staff33311 – 将工作,但它不是我所“ m之后,我想要的url接受一个“点”,如下面的例子 – http://somedomain.com/api/people/staff.33311 – 但这给了我一个 HTTP Error 404.0 – Not Found The resource you are looking for has been removed, had its name changed, or is temporarily unavailable. 我已经设置了以下的东西: 控制器“PeopleController” public IEnumerable<Person> GetAllPeople() { return _people; } public IHttpActionResult GetPerson(string id) […]