ASP.NET Web API私有控制器
发布时间:2020-12-16 07:05:49 所属栏目:asp.Net 来源:网络整理
导读:我有一个带有两个控制器的ASP.NET Web API项目,其中一个我想通过互联网公开寻址,另一个我只想通过网络内部调用. 到目前为止,我能想出的最佳解决方案是为公共控制器提供路由模板,为内部提供模板: – routeTemplate:“api / {controller} / {id}” routeTemp
我有一个带有两个控制器的ASP.NET Web API项目,其中一个我想通过互联网公开寻址,另一个我只想通过网络内部调用.
到目前为止,我能想出的最佳解决方案是为公共控制器提供路由模板,为内部提供模板: – routeTemplate:“api / {controller} / {id}” routeTemplate:“privateapi / {controller} / {id}” 这样我就可以配置IIS来阻止对’privateapi’路由的请求. 这是处理这种情况的最佳方法吗? 谢谢. 解决方法
在IIS中控制访问MVC和WebAPI的问题是,路由有时会使您很难确切地看到哪些路由最终会出现在您的控制器上.在代码中限制访问也是完全有效的(并且在许多情况下是优选的).
要在代码中执行此操作,您可以执行以下操作,使用自定义AuthorizeAttribute来过滤未经授权的用户. public class InternalAuthorizeAttribute : AuthorizeAttribute { public override void OnAuthorization(System.Web.Http.Controllers.HttpActionContext actionContext) { if (actionContext.Request.Properties.ContainsKey("MS_HttpContext")) { var ipAddress = ((HttpContextWrapper) actionContext.Request.Properties["MS_HttpContext"]).Request.UserHostAddress; if (IsPrivateAddress(ipAddress)) { return; } } actionContext.Response = actionContext.Request.CreateErrorResponse(HttpStatusCode.Forbidden,"Forbidden"); } private bool IsPrivateAddress(string ipAddress) { // todo: verify ip address is in internal or otherwise whitelisted } } 然后,您可以注释控制器并将过滤器应用于控制器中的所有操作. [InternalAuthorize] public class PrivateController : ApiController { } 注意:如果来自此控制器的信息/操作特别敏感,您可能希望部署应用程序的一个版本,该应用程序公开此私有API并阻止来自白名单的所有流量,而不是依赖应用程序逻辑来阻止坏人. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
推荐文章
站长推荐
- asp.net-mvc – 如何在ASP.NET MVC中更改Url.Enc
- asp.net – 无法加载文件或程序集App_Licenses
- asp.net-mvc-3 – 对MVC4 Web API性能问题进行故
- ASP.NET AJAX:在页面加载完成后触发UpdatePanel
- asp.net-mvc – ASP.NET MVC重复任务
- ASP.NET异步任务 – 如何使用Page.RegisterAsync
- asp.net-core – 使用Scaffold-DBContext设置数据
- asp.net-mvc – 如何在页面中显示ASP.net MVC项目
- 执行迁移EF core 2.0时出错,将Identity id从stri
- asp.net-mvc – MapMvcAttributeRoutes:此方法不
热点阅读