ASP.NET Web API总结
1. 跨域
- 提供Http层的web api时,通常需要考虑跨域问题。
- 因为浏览器处于安全考虑,默认不允许前端页面向不是自己所在的ip/域名发起请求,因此需要服务器端指明自己允许部分或所有域名进行跨域请求
- 通常是在web.config中配置、web服务器中进行站点配置、根目录下方式跨域文件等方式。
- 最好不要允许所有域名可以发起跨域请求,可以初步避免XSS,但攻击者其实还是可以通过iframe或jsonp等方式绕过。
- 不能跨域时,从浏览器的返回中可以看到,通常是这个错误:No “Access-Control-Allow-Origin” header is present
- 可以在web.config中增加如下配置以允许跨站请求:
<system.webServer>
<httpProtocol>
<customHeaders>
<add name="Access-Control-Allow-Origin" value="*" />
<add name="Access-Control-Allow-Headers" value="Content-Type" />
<add name="Access-Control-Allow-Methods" value="GET, POST, PUT, DELETE, OPTIONS" />
</customHeaders>
</httpProtocol>
</system.webServer>
2. 405错误
- 有时请求webapi,会返回405 (Method Not Allowed),可能需要注释掉web.config中的如下配置:
<remove name="ExtensionlessUrlHandler-Integrated-4.0" />
<remove name="OPTIONSVerbHandler" />
<remove name="TRACEVerbHandler" />
<add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
3. 路由配置
- WebApiConfig中的路由配置要避免同一url匹配多个模式或者接口
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
// Web API 配置和服务
// Web API 路由
config.MapHttpAttributeRoutes();
//config.Routes.MapHttpRoute(
// name: "DefaultApi",
// routeTemplate: "api/{controller}/{id}",
// defaults: new { id = RouteParameter.Optional }
//);
config.Routes.MapHttpRoute(
name: "WebApi",
routeTemplate: "api/{controller}/{action}/{id}",
defaults: new { id = RouteParameter.Optional }
);
}
}
4. 认证
- 过滤器
/// <summary>
/// 通用认证过滤器
/// </summary>
public class AuthorizeAttribute : ActionFilterAttribute
{
/// <summary>
/// 在调用操作方法之后发生
/// </summary>
/// <param name="actionContext">操作执行的上下文</param>
public override void OnActionExecuting(HttpActionContext actionContext)
{
try
{
// 记录请求数据
//string controllName = actionContext.ControllerContext.ControllerDescriptor.ControllerName;
string actionName = actionContext.ActionDescriptor.ActionName;
if (actionName != "Login" && actionName != "HasLoggedIn")
{
if (!HttpContext.Current.User.Identity.IsAuthenticated)
{
actionContext.Response = actionContext.Request.CreateResponse(HttpStatusCode.Forbidden, new ResponseResult<string>() { RetCode = RetCode.Error, Message = CommonMsg.Info_NotLoggedIn });
}
}
}
catch (Exception ex)
{
Log4netLoggerWrapper.Instance().LogError(ex, $"AuthorizeAttribute|OnActionExecuting--->出错");
actionContext.Response = actionContext.Request.CreateResponse(HttpStatusCode.Forbidden, new ResponseResult<string>() { RetCode = RetCode.Error, Message = CommonMsg.Error_AuthFail });
return;
}
base.OnActionExecuting(actionContext);
}
/// <summary>
/// 在调用操作方法之后发生
/// </summary>
/// <param name="actionExecutedContext">操作执行的上下文</param>
public override void OnActionExecuted(HttpActionExecutedContext actionExecutedContext)
{
// 记录响应数据
base.OnActionExecuted(actionExecutedContext);
}
}
- 基本认证
ASP.NET Web API总结的更多相关文章
- 在一个空ASP.NET Web项目上创建一个ASP.NET Web API 2.0应用
由于ASP.NET Web API具有与ASP.NET MVC类似的编程方式,再加上目前市面上专门介绍ASP.NET Web API 的书籍少之又少(我们看到的相关内容往往是某本介绍ASP.NET M ...
- ASP.NET Web API Model-ActionBinding
ASP.NET Web API Model-ActionBinding 前言 前面的几个篇幅把Model部分的知识点划分成一个个的模块来讲解,而在控制器执行过程中分为好多个过程,对于控制器执行过程(一 ...
- ASP.NET Web API Model-ParameterBinding
ASP.NET Web API Model-ParameterBinding 前言 通过上个篇幅的学习了解Model绑定的基础知识,然而在ASP.NET Web API中Model绑定功能模块并不是被 ...
- ASP.NET Web API Model-ModelBinder
ASP.NET Web API Model-ModelBinder 前言 本篇中会为大家介绍在ASP.NET Web API中ModelBinder的绑定原理以及涉及到的一些对象模型,还有简单的Mod ...
- ASP.NET Web API Model-ValueProvider
ASP.NET Web API Model-ValueProvider 前言 前面一篇讲解了Model元数据,Model元数据是在Model绑定中很重要的一部分,只是Model绑定中涉及的知识点比较多 ...
- ASP.NET Web API Model-ModelMetadata
ASP.NET Web API Model-ModelMetadata 前言 前面的几个篇幅主要围绕控制器的执行过程,奈何执行过程中包含的知识点太庞大了,只能一部分一部分的去讲解,在上两篇中我们看到在 ...
- ASP.NET Web API 过滤器创建、执行过程(二)
ASP.NET Web API 过滤器创建.执行过程(二) 前言 前面一篇中讲解了过滤器执行之前的创建,通过实现IFilterProvider注册到当前的HttpConfiguration里的服务容器 ...
- ASP.NET Web API 过滤器创建、执行过程(一)
ASP.NET Web API 过滤器创建.执行过程(一) 前言 在上一篇中我们讲到控制器的执行过程系列,这个系列要搁置一段时间了,因为在控制器执行的过程中包含的信息都是要单独的用一个系列来描述的,就 ...
- ASP.NET Web API 控制器执行过程(一)
ASP.NET Web API 控制器执行过程(一) 前言 前面两篇讲解了控制器的创建过程,只是从框架源码的角度去简单的了解,在控制器创建过后所执行的过程也是尤为重要的,本篇就来简单的说明一下控制器在 ...
- ASP.NET Web API 控制器创建过程(二)
ASP.NET Web API 控制器创建过程(二) 前言 本来这篇随笔应该是在上周就该写出来发布的,由于身体跟不上节奏感冒发烧有心无力,这种天气感冒发烧生不如死,也真正的体会到了什么叫病来如山倒,病 ...
随机推荐
- 变体类型 Variant VARIANT
变体类型 Variant VARIANT class RTL_DELPHIRETURN Variant: public TVarData typedef struct tagVARIANT V ...
- FrameworkElement.FindName 根据名字查找控件
WPF FrameworkElement.FindName 根据名字查找控件 运行环境:Window7 64bit,NetFramework4.7,C# 7.0, 编者:乌龙哈里 2017-10 ...
- IOS 键盘的显示与关闭
在每一个IOS应用中,几乎不可避免的要进行文本输入操作,例如要求用户填写登陆注册信息,进行话题的评论回复,等等.用到的文本输入组件有UITextField,UITextView,对于这两个组件的相关属 ...
- jira 安装
jira jira是Atlassian公司出品的项目与事务跟踪工具,被广泛应用于缺陷跟踪(bug管理).客户服务.需求收集.流程审批.任务跟踪.项目跟踪和敏捷管理等工作领域.同禅道等类似. 安装前准备 ...
- 认识单元测试(jar包资源网址:http://search.maven.org/)
单元测试在3.8版本以前只需要导入一个jar包,3.8版本以后需要导入二个jar包.(网址:http://junit.org/junit4/) package com.huawei.junit; im ...
- Docker常用命令和Dockerfile语法
Linux安装Docker: sudo wget -qO- https://get.docker.com/ | sh 安装后只能用root管理,要给其他用户权限,使用命令: sudo usermod ...
- inline-block元素出现位置错位的解决方法
如下代码所示: <div class="container"> <div style="display: inline-block; height: 1 ...
- SpringBoot 项目打war包 tomcat部署
今天看了一下springboot的项目,个人习惯是接触新的语言或框架,首先要做的就是程序员届最常用的“Hello World”,然后进行项目部署,然今天部署却发现一直都是404,查看tomcat的we ...
- 利用fetch进行POST传参
fetch(config.host+"url",{ method:"POST", mode: 'cors',跨域请求 headers: { ...
- Window: move\copy\xcopy
Move 移动文件和重命名文件与目录. 要移动一个或多个文件: MOVE [/Y | /-Y] [drive:][path]filename1[,...] destination 要重命名目录: MO ...