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总结的更多相关文章

  1. 在一个空ASP.NET Web项目上创建一个ASP.NET Web API 2.0应用

    由于ASP.NET Web API具有与ASP.NET MVC类似的编程方式,再加上目前市面上专门介绍ASP.NET Web API 的书籍少之又少(我们看到的相关内容往往是某本介绍ASP.NET M ...

  2. ASP.NET Web API Model-ActionBinding

    ASP.NET Web API Model-ActionBinding 前言 前面的几个篇幅把Model部分的知识点划分成一个个的模块来讲解,而在控制器执行过程中分为好多个过程,对于控制器执行过程(一 ...

  3. ASP.NET Web API Model-ParameterBinding

    ASP.NET Web API Model-ParameterBinding 前言 通过上个篇幅的学习了解Model绑定的基础知识,然而在ASP.NET Web API中Model绑定功能模块并不是被 ...

  4. ASP.NET Web API Model-ModelBinder

    ASP.NET Web API Model-ModelBinder 前言 本篇中会为大家介绍在ASP.NET Web API中ModelBinder的绑定原理以及涉及到的一些对象模型,还有简单的Mod ...

  5. ASP.NET Web API Model-ValueProvider

    ASP.NET Web API Model-ValueProvider 前言 前面一篇讲解了Model元数据,Model元数据是在Model绑定中很重要的一部分,只是Model绑定中涉及的知识点比较多 ...

  6. ASP.NET Web API Model-ModelMetadata

    ASP.NET Web API Model-ModelMetadata 前言 前面的几个篇幅主要围绕控制器的执行过程,奈何执行过程中包含的知识点太庞大了,只能一部分一部分的去讲解,在上两篇中我们看到在 ...

  7. ASP.NET Web API 过滤器创建、执行过程(二)

    ASP.NET Web API 过滤器创建.执行过程(二) 前言 前面一篇中讲解了过滤器执行之前的创建,通过实现IFilterProvider注册到当前的HttpConfiguration里的服务容器 ...

  8. ASP.NET Web API 过滤器创建、执行过程(一)

    ASP.NET Web API 过滤器创建.执行过程(一) 前言 在上一篇中我们讲到控制器的执行过程系列,这个系列要搁置一段时间了,因为在控制器执行的过程中包含的信息都是要单独的用一个系列来描述的,就 ...

  9. ASP.NET Web API 控制器执行过程(一)

    ASP.NET Web API 控制器执行过程(一) 前言 前面两篇讲解了控制器的创建过程,只是从框架源码的角度去简单的了解,在控制器创建过后所执行的过程也是尤为重要的,本篇就来简单的说明一下控制器在 ...

  10. ASP.NET Web API 控制器创建过程(二)

    ASP.NET Web API 控制器创建过程(二) 前言 本来这篇随笔应该是在上周就该写出来发布的,由于身体跟不上节奏感冒发烧有心无力,这种天气感冒发烧生不如死,也真正的体会到了什么叫病来如山倒,病 ...

随机推荐

  1. Variant

    class RTL_DELPHIRETURN Variant: public TVarData Variant转换为字符串 System::Variants::VarToStr VariantArra ...

  2. Android apk couldn't install

    an existing package with the same name and signature is already installed

  3. Dbvisualizer设置SQL语句自动提示

    Dbvisualizer默认不自动提示SQL语句的命令及查询的表,虽然可以通过Ctrl+/快捷键进行手动调用出提示信息,用习惯了PLSQL Developer难免有些不适应. 设置自动提示方法: 点击 ...

  4. selenium安装方式

    selenium的二种安装方式 1.在线安装:打开cmd输入, pip.ext install selenium 2.离线安装,下载selenium安装包,然后解压,在cmd中进入到解压的文件中,在运 ...

  5. 从socket开始讲IOS网络编程

    home list tags talk user rss Mac&iOS Socket 大纲 一.Socket简介 二.BSD Socket编程准备 1.地址 2.端口 3.网络字节序 4.半 ...

  6. js中function的与众不同

    js中function的与众不同在于可以被调用

  7. Camera’s Depth Texture

    [Camera’s Depth Texture] In Unity a Camera can generate a depth or depth+normals texture. This is a ...

  8. Apache Hive (三)Hive元数据信息对应MySQL数据库表

    转自:https://www.cnblogs.com/qingyunzong/p/8710356.html 概述 Hive 的元数据信息通常存储在关系型数据库中,常用MySQL数据库作为元数据库管理. ...

  9. Shiro 集成Spring 使用 redis时 使用redisTemplate替代jedisPool(五)

    1.添加依赖架包: <dependency> <groupId>org.springframework.data</groupId> <artifactId& ...

  10. rsyslog收集nginx日志配置

    rsyslog日志收集配置 rsyslog服务器收集各服务器的日志,并汇总,再由logstash处理 请查看上一篇文章  http://bbotte.blog.51cto.com/6205307/16 ...