asp.net-mvc-4 – 为WebApi实施两脚架OAuth 2.0
发布时间:2020-12-16 09:48:01 所属栏目:asp.Net 来源:网络整理
导读:我使用VS2012RC创建了一个mvc4 webapi项目.我试图在我的项目中实现两条腿的Oauth 2.我按照教程“http://community.codesmithtools.com/CodeSmith_Community/b/tdupont/archive/2011/03/18/oauth-2-0-for-mvc-two-legged-implementation.aspx”,尽管它是为mvc
我使用VS2012RC创建了一个mvc4 webapi项目.我试图在我的项目中实现两条腿的Oauth 2.我按照教程“http://community.codesmithtools.com/CodeSmith_Community/b/tdupont/archive/2011/03/18/oauth-2-0-for-mvc-two-legged-implementation.aspx”,尽管它是为mvc我实现它为web api.但是没有用
我为我的客户端创建了一个html页面.当html页面加载时,它执行一个ajax函数,该函数用于返回“访问令牌”. <script type="text/javascript"> $(document).ready(function () { var url = 'http://localhost:9792/api/Login'; $.get(url,function(data) { alert(data); },"jsonp"); }); </script> 服务器端代码是, [NoCache] public class LoginController : ApiController { public LoginModelOAuth GetLogin() { var response = OAuthServiceBase.Instance.RequestToken(); LoginModelOAuth lmo = new LoginModelOAuth(); lmo.RequestToken = response.RequestToken; return lmo; } } RequestToken()方法看起来像, public override OAuthResponse RequestToken() { var token = Guid.NewGuid().ToString("N"); var expire = DateTime.Now.AddMinutes(5); RequestTokens.Add(token,expire); return new OAuthResponse { Expires = (int)expire.Subtract(DateTime.Now).TotalSeconds,RequestToken = token,RequireSsl = false,Success = true }; } LoginModelOAuth模型看起来像, public class LoginModelOAuth { public string RequestToken { get; set; } public string ErrorMessage { get; set; } public string ReturnUrl { get; set; } } 当我执行客户端代码时,我收到以下错误 "500 Internal Server Error" 所以我调试了服务器端代码,在服务器端,我收到了与此代码对应的错误 “var response = OAuthServiceBase.Instance.RequestToken();”,错误是 NullReferenceException was unhandled by user code "Object reference not set to an instance of an object." 我的webconfig文件看起来像, <configuration> <configSections> <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection,EntityFramework,Version=4.4.0.0,Culture=neutral,PublicKeyToken=b77a5c561934e089" requirePermission="false" /> <section name="oauth" type="OAuth2.Mvc.Configuration.OAuthSection,OAuth2.Mvc,Version=1.0.0.0,Culture=neutral"/> <sectionGroup name="dotNetOpenAuth" type="DotNetOpenAuth.Configuration.DotNetOpenAuthSection,DotNetOpenAuth.Core"> <section name="messaging" type="DotNetOpenAuth.Configuration.MessagingElement,DotNetOpenAuth.Core" requirePermission="false" allowLocation="true" /> <section name="reporting" type="DotNetOpenAuth.Configuration.ReportingElement,DotNetOpenAuth.Core" requirePermission="false" allowLocation="true" /> </sectionGroup> </configSections> <oauth defaultProvider="DemoProvider" defaultService="DemoService"> <providers> <add name="DemoProvider" type="MillionNodesApi.OAuth.DemoProvider,MillionNodesApi" /> </providers> <services> <add name="DemoService" type="MillionNodesApi.OAuth.DemoService,MillionNodesApi" /> </services> </oauth> <system.web> <httpModules> <add name="OAuthAuthentication" type="OAuth2.Mvc.Module.OAuthAuthenticationModule,Culture=neutral"/> </httpModules> <compilation debug="true" targetFramework="4.0" /> <authentication mode="Forms"> <forms loginUrl="~/Account/Login" timeout="2880" /> </authentication> <pages> <namespaces> <add namespace="System.Web.Helpers" /> <add namespace="System.Web.Mvc" /> <add namespace="System.Web.Mvc.Ajax" /> <add namespace="System.Web.Mvc.Html" /> <add namespace="System.Web.Optimization" /> <add namespace="System.Web.Routing" /> <add namespace="System.Web.WebPages" /> </namespaces> </pages> </system.web> <dotNetOpenAuth> <messaging> <untrustedWebRequest> <whitelistHosts> <!-- Uncomment to enable communication with localhost (should generally not activate in production!) --> <!--<add name="localhost" />--> </whitelistHosts> </untrustedWebRequest> </messaging> <!-- Allow DotNetOpenAuth to publish usage statistics to library authors to improve the library. --> <reporting enabled="true" /> 它适用于web api吗? 如果没有,请建议我任何有用的教程. 谢谢. 解决方法
我认为问题是你在
IIS7 with integrated mode so you will need to migarate your config从system.web / httpModules到system.webServer / modules
<system.web> <httpModules> <add name="OAuthAuthentication" type="OAuth2.Mvc.Module.OAuthAuthenticationModule,Culture=neutral"/> </httpModules> 变 <system.webServer> <modules> <add name="OAuthAuthentication" type="OAuth2.Mvc.Module.OAuthAuthenticationModule,Culture=neutral" preCondition="" /> </modules> 试试吧 您可以尝试通过设置来命中模块 <modules runAllManagedModulesForAllRequests="true"> 也许 如果您仍然遇到问题,可能是模块的执行顺序尝试删除路由,并将您的OAuth放在顶部… <modules> <remove name="UrlRoutingModule-4.0" /> <add name="OAuthAuthentication" type="OAuth2.Mvc.Module.OAuthAuthenticationModule,Culture=neutral" preCondition="" /> <add name="UrlRoutingModule-4.0" type="System.Web.Routing.UrlRoutingModule" preCondition="" /> (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- ASP.NET MVC 3中的当前年份
- asp.net-mvc – 概念类型中的成员数量不匹配 – 但确实如此
- asp.net – 使用TextBox的AutoPostback失去焦点
- ASP.NET Forms Authentication阻止在Login.aspx上加载javas
- .net – TransactionScope:它变得更好了吗?
- 端到ASP.NET MVC的推荐方法
- asp.net-mvc-3 – MVC3 razor Webgrid分页和排序超过2000条
- asp.net-mvc – 在Umbraco 6.1.1 MVC 4中,如何使用继承自Um
- ASP.NET MVC 3 – 处理多个域并共享单个代码库
- 如何从ASP.Net和C#中的数据库中获取和显示图像
推荐文章
站长推荐
- asp.net-mvc – 防止加载部分视图
- asp.net – EF首先使用代码与一对多关系创建重复
- asp.net-mvc – ASP.NET MVC – Partial View可以
- asp.net-mvc – 为什么DisplayFormat DataFormat
- .net – 匹配另一条路线的路线,忽略HttpMethodCo
- asp.net – __doPostBack重新加载整个页面而不仅
- asp.net 上传或下载当文件名包含有特殊字符"#"的
- ASP.NET CORE系列【七】分析NetCore启动原理
- asp.net-mvc – 查看模板代码标签 – asp.net mv
- ASP.NET Core API Restful 实现微服务
热点阅读