亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

elmah-ErrorLoggingModulesandHandlersforASP.NET-1:初體驗

2019-11-14 16:39:05
字體:
來源:轉載
供稿:網友

elmah(英文):https://code.google.com/p/elmah/

 

寫作思路:先看結果,然后再說原理

 

elmah文章基本內容如下

 

1.安裝

2.基本使用

3.詳細配置講解

 

簡介

ELMAH是一個開源項目,其目的是記錄和報告在asp.net Web應用程序未處理的異常。

 

早在2004年9月與Atif阿齊茲和斯科特·米切爾發表在MSDN Library,其目的是作為一個概念證明,編寫自包含的功能與ASP.NET HTTP模塊和處理程序是絕對有可能的,大多有這種特征可能是一篇文章插入沒有重新編譯和小的改動配置文件的現有應用程序。 為了展示這些概念的文章發表了示例項目,其目的是為了攔截,記錄和通知ASP.NET應用程序中發生未處理的異常。 它被賦予ELMAH的名稱,錯誤日志記錄模塊和處理程序。

 

 

1.安裝

 

新建一個MVC項目,在nuget的控制臺輸入命令回車進行安裝:Install-Package elmah

 

MVC項目詳情如下

 

開發環境

vs 2012

sql server 2012

 

HomeController:

using System;using System.Collections.Generic;using System.Linq;using System.Web;using System.Web.Mvc;namespace Jean.ElmahSample.Controllers{    public class HomeController : Controller    {        //        // GET: /Home/        public ActionResult Index()        {            return View();        }    }}

Index View :

view

 

運行顯示效果:

正常效果

 

 

安裝后 web.config 文件內容變為如下圖-1-1所示(暫時先不要管里面的內容是什么意思,后面再慢慢解答)

圖-1-1

<?xml version="1.0" encoding="utf-8"?><!--  有關如何配置 ASP.NET 應用程序的詳細信息,請訪問  http://go.microsoft.com/fwlink/?LinkId=152368  --><configuration>  <configSections>    <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->    <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />    <sectionGroup name="elmah">      <section name="security" requirePermission="false" type="Elmah.SecuritySectionHandler, Elmah" />      <section name="errorLog" requirePermission="false" type="Elmah.ErrorLogSectionHandler, Elmah" />      <section name="errorMail" requirePermission="false" type="Elmah.ErrorMailSectionHandler, Elmah" />      <section name="errorFilter" requirePermission="false" type="Elmah.ErrorFilterSectionHandler, Elmah" />    </sectionGroup>  </configSections>  <connectionStrings>    <add name="DefaultConnection" PRoviderName="System.Data.SqlClient" connectionString="Data Source=(LocalDb)/v11.0;Initial Catalog=aspnet-Jean.ElmahSample-20140524091142;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|/aspnet-Jean.ElmahSample-20140524091142.mdf" />  </connectionStrings>  <appSettings>    <add key="webpages:Version" value="2.0.0.0" />    <add key="webpages:Enabled" value="false" />    <add key="PreserveLoginUrl" value="true" />    <add key="ClientValidationEnabled" value="true" />    <add key="UnobtrusivejavaScriptEnabled" value="true" />  </appSettings>  <system.web>    <httpRuntime targetFramework="4.5" />    <compilation debug="true" targetFramework="4.5" />    <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>    <profile defaultProvider="DefaultProfileProvider">      <providers>        <add name="DefaultProfileProvider" type="System.Web.Providers.DefaultProfileProvider, System.Web.Providers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" connectionStringName="DefaultConnection" applicationName="/" />      </providers>    </profile>    <membership defaultProvider="DefaultMembershipProvider">      <providers>        <add name="DefaultMembershipProvider" type="System.Web.Providers.DefaultMembershipProvider, System.Web.Providers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" connectionStringName="DefaultConnection" enablePassWordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="false" requiresUniqueEmail="false" maxInvalidPasswordAttempts="5" minRequiredPasswordLength="6" minRequiredNonalphanumericCharacters="0" passwordAttemptWindow="10" applicationName="/" />      </providers>    </membership>    <roleManager defaultProvider="DefaultRoleProvider">      <providers>        <add name="DefaultRoleProvider" type="System.Web.Providers.DefaultRoleProvider, System.Web.Providers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" connectionStringName="DefaultConnection" applicationName="/" />      </providers>    </roleManager>    <!--            If you are deploying to a cloud environment that has multiple web server instances,            you should change session state mode from "InProc" to "Custom". In addition,            change the connection string named "DefaultConnection" to connect to an instance            of SQL Server (including SQL Azure and SQL  Compact) instead of to SQL Server Express.      -->    <sessionState mode="InProc" customProvider="DefaultSessionProvider">      <providers>        <add name="DefaultSessionProvider" type="System.Web.Providers.DefaultSessionStateProvider, System.Web.Providers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" connectionStringName="DefaultConnection" />      </providers>    </sessionState>    <httpModules>      <add name="ErrorLog" type="Elmah.ErrorLogModule, Elmah" />      <add name="ErrorMail" type="Elmah.ErrorMailModule, Elmah" />      <add name="ErrorFilter" type="Elmah.ErrorFilterModule, Elmah" />    </httpModules>  </system.web>  <system.webServer>    <validation validateIntegratedModeConfiguration="false" />    <handlers>      <remove name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" />      <remove name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" />      <remove name="ExtensionlessUrlHandler-Integrated-4.0" />      <add name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%/Microsoft.NET/Framework/v4.0.30319/aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" />      <add name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%/Microsoft.NET/Framework64/v4.0.30319/aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />      <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />    </handlers>    <modules>      <add name="ErrorLog" type="Elmah.ErrorLogModule, Elmah" preCondition="managedHandler" />      <add name="ErrorMail" type="Elmah.ErrorMailModule, Elmah" preCondition="managedHandler" />      <add name="ErrorFilter" type="Elmah.ErrorFilterModule, Elmah" preCondition="managedHandler" />    </modules>  </system.webServer>  <runtime>    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">      <dependentAssembly>        <assemblyIdentity name="System.Web.Helpers" publicKeyToken="31bf3856ad364e35" />        <bindingRedirect oldVersion="1.0.0.0-2.0.0.0" newVersion="2.0.0.0" />      </dependentAssembly>      <dependentAssembly>        <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" />        <bindingRedirect oldVersion="1.0.0.0-4.0.0.0" newVersion="4.0.0.0" />      </dependentAssembly>      <dependentAssembly>        <assemblyIdentity name="System.Web.WebPages" publicKeyToken="31bf3856ad364e35" />        <bindingRedirect oldVersion="1.0.0.0-2.0.0.0" newVersion="2.0.0.0" />      </dependentAssembly>      <dependentAssembly>        <assemblyIdentity name="EntityFramework" publicKeyToken="b77a5c561934e089" />        <bindingRedirect oldVersion="0.0.0.0-5.0.0.0" newVersion="5.0.0.0" />      </dependentAssembly>      <dependentAssembly>        <assemblyIdentity name="WebGrease" publicKeyToken="31bf3856ad364e35" />        <bindingRedirect oldVersion="1.0.0.0-1.3.0.0" newVersion="1.3.0.0" />      </dependentAssembly>    </assemblyBinding>  </runtime>  <entityFramework>    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">      <parameters>        <parameter value="v11.0" />      </parameters>    </defaultConnectionFactory>  </entityFramework>  <elmah>    <!--        See http://code.google.com/p/elmah/wiki/SecuringErrorLogPages for         more information on remote access and securing ELMAH.    -->    <security allowRemoteAccess="false" />  </elmah>  <location path="elmah.axd" inheritInChildApplications="false">    <system.web>      <httpHandlers>        <add verb="POST,GET,HEAD" path="elmah.axd" type="Elmah.ErrorLogPageFactory, Elmah" />      </httpHandlers>      <!--         See http://code.google.com/p/elmah/wiki/SecuringErrorLogPages for         more information on using ASP.NET authorization securing ELMAH.      <authorization>        <allow roles="admin" />        <deny users="*" />        </authorization>      -->    </system.web>    <system.webServer>      <handlers>        <add name="ELMAH" verb="POST,GET,HEAD" path="elmah.axd" type="Elmah.ErrorLogPageFactory, Elmah" preCondition="integratedMode" />      </handlers>    </system.webServer>  </location></configuration>

 

 

2.基本使用

 

錯誤數據源(錯誤存儲的地方)

 

2.1 存儲在內存中

 

輸入地址 http://localhost:5547/home/about

看下圖結果

圖2-1

2-1

 

輸入地址 http://localhost:5547/elmah.axd  (elmah.axd不是一個真實存在的文件,也不需要我們自己去新建)

 

看下圖結果

圖2-2

 

2-2

 

點擊并試一試

rss FEED

DOWNLOAD LOG

 

點擊圖2-2中Details 查看詳情如下

2-3

 

 

默認情況下,錯誤存儲在內存中,錯誤數量上限為15

 

修改web.config中elmah節點,并設置錯誤數量上限為5

(當第6個錯誤出現時,前面5個存在的錯誤有一個會被最新的錯誤記錄替換)

<elmah>        <!--Storing errors in memory-->    <errorLog type="Elmah.MemoryErrorLog, Elmah" size="5" /></elmah>

 

 

 

2.2 存儲在xml中

 

修改web.config中elmah節點,如下圖

 

<elmah>    <!--Storing errors in XML files-->    <errorLog type="Elmah.XmlFileErrorLog, Elmah" logdata-path="~/App_Data" /></elmah>

 

 

輸入地址 http://localhost:5547/home/adjkf

看下圖結果

2-2-1

 

2-2-2

 

 

2.3 存儲在sql server中

 

2.3.1 修改web.config文件,關鍵信息如下

 

<elmah>    <!--Storing errors in SQL Server-->    <errorLog type="Elmah.SqlErrorLog, Elmah" connectionStringName="Elmah.Sql" /></elmah><connectionStrings>    <!--Northwind為我測試的數據庫名稱-->    <add name="Elmah.Sql" connectionString="Data Source=.;Initial Catalog=Northwind;Trusted_Connection=True" /> </connectionStrings>

 

2.3.2 在數據庫里執行一下下面sql腳本(我測試的數據庫是Northwind)

執行后會創建一張表ELMAH_Error和3個存儲過程

/*     ELMAH - Error Logging Modules and Handlers for ASP.NET   Copyright (c) 2004-9 Atif Aziz. All rights reserved.      Author(s):          Atif Aziz, http://www.raboof.com        Phil Haacked, http://haacked.com     Licensed under the Apache License, Version 2.0 (the "License");   you may not use this file except in compliance with the License.   You may obtain a copy of the License at        http://www.apache.org/licenses/LICENSE-2.0     Unless required by applicable law or agreed to in writing, software   distributed under the License is distributed on an "AS IS" BASIS,   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.   See the License for the specific language governing permissions and   limitations under the License.  */-- ELMAH DDL script for Microsoft SQL Server 2000 or later.-- $Id: SQLServer.sql 677 2009-09-29 18:02:39Z azizatif $DECLARE @DBCompatibilityLevel INTDECLARE @DBCompatibilityLevelMajor INTDECLARE @DBCompatibilityLevelMinor INTSELECT  @DBCompatibilityLevel = cmptlevelFROM    master.dbo.sysdatabasesWHERE   name = DB_NAME()IF @DBCompatibilityLevel <> 80     BEGIN        SELECT  @DBCompatibilityLevelMajor = @DBCompatibilityLevel / 10 ,                @DBCompatibilityLevelMinor = @DBCompatibilityLevel % 10                   PRINT N'    ===========================================================================    WARNING!     ---------------------------------------------------------------------------        This script is designed for Microsoft SQL Server 2000 (8.0) but your     database is set up for compatibility with version '            + CAST(@DBCompatibilityLevelMajor AS NVARCHAR(80)) + N'.'            + CAST(@DBCompatibilityLevelMinor AS NVARCHAR(80)) + N'. Although     the script should work with later versions of Microsoft SQL Server,     you can ensure compatibility by executing the following statement:        ALTER DATABASE [' + DB_NAME()            + N']     SET COMPATIBILITY_LEVEL = 80    If you are hosting ELMAH in the same database as your application     database and do not wish to change the compatibility option then you     should create a separate database to host ELMAH where you can set the     compatibility level more freely.        If you continue with the current setup, please report any compatibility     issues you encounter over at:        http://code.google.com/p/elmah/issues/list    ==========================================================================='    ENDGO/* ------------------------------------------------------------------------         TABLES   ------------------------------------------------------------------------ */CREATE TABLE [dbo].[ELMAH_Error]    (      [ErrorId] UNIQUEIDENTIFIER NOT NULL ,      [Application] NVARCHAR(60) COLLATE SQL_Latin1_General_CP1_CI_AS                                 NOT NULL ,      [Host] NVARCHAR(50) COLLATE SQL_Latin1_General_CP1_CI_AS                          NOT NULL ,      [Type] NVARCHAR(100) COLLATE SQL_Latin1_General_CP1_CI_AS                           NOT NULL ,      [Source] NVARCHAR(60) COLLATE SQL_Latin1_General_CP1_CI_AS                            NOT NULL ,      [Message] NVARCHAR(500) COLLATE SQL_Latin1_General_CP1_CI_AS                              NOT NULL ,      [User] NVARCHAR(50) COLLATE SQL_Latin1_General_CP1_CI_AS                          NOT NULL ,      [StatusCode] INT NOT NULL ,      [TimeUtc] DATETIME NOT NULL ,      [Sequence] INT IDENTITY(1, 1)                     NOT NULL ,      [AllXml] NTEXT COLLATE SQL_Latin1_General_CP1_CI_AS                     NOT NULL    )ON  [PRIMARY] TEXTIMAGE_ON [PRIMARY]GOALTER TABLE [dbo].[ELMAH_Error] WITH NOCHECK ADD CONSTRAINT [PK_ELMAH_Error] PRIMARY KEY NONCLUSTERED ([ErrorId]) ON [PRIMARY] GOALTER TABLE [dbo].[ELMAH_Error] ADD CONSTRAINT [DF_ELMAH_Error_ErrorId] DEFAULT (NEWID()) FOR [ErrorId]GOCREATE NONCLUSTERED INDEX [IX_ELMAH_Error_App_Time_Seq] ON [dbo].[ELMAH_Error] ([Application]   ASC,[TimeUtc]       DESC,[Sequence]      DESC) ON [PRIMARY]GO/* ------------------------------------------------------------------------         STORED PROCEDURES                                                         ------------------------------------------------------------------------ */SET QUOTED_IDENTIFIER ON GOSET ANSI_NULLS ON GOCREATE PROCEDURE [dbo].[ELMAH_GetErrorXml]    (      @Application NVARCHAR(60) ,      @ErrorId UNIQUEIDENTIFIER    )AS     SET NOCOUNT ON    SELECT  [AllXml]    FROM    [ELMAH_Error]    WHERE   [ErrorId] = @ErrorId            AND [Application] = @ApplicationGOSET QUOTED_IDENTIFIER OFF GOSET ANSI_NULLS ON GOSET QUOTED_IDENTIFIER ON GOSET ANSI_NULLS ON GOCREATE PROCEDURE [dbo].[ELMAH_GetErrorsXml]    (      @Application NVARCHAR(60) ,      @PageIndex INT = 0 ,      @PageSize INT = 15 ,      @TotalCount INT OUTPUT    )AS     SET NOCOUNT ON    DECLARE @FirstTimeUTC DATETIME    DECLARE @FirstSequence INT    DECLARE @StartRow INT    DECLARE @StartRowIndex INT    SELECT  @TotalCount = COUNT(1)    FROM    [ELMAH_Error]    WHERE   [Application] = @Application    -- Get the ID of the first error for the requested page    SET @StartRowIndex = @PageIndex * @PageSize + 1    IF @StartRowIndex <= @TotalCount         BEGIN            SET ROWCOUNT @StartRowIndex            SELECT  @FirstTimeUTC = [TimeUtc] ,                    @FirstSequence = [Sequence]            FROM    [ELMAH_Error]            WHERE   [Application] = @Application            ORDER BY [TimeUtc] DESC ,                    [Sequence] DESC        END    ELSE         BEGIN            SET @PageSize = 0        END    -- Now set the row count to the requested page size and get    -- all records below it for the pertaining application.    SET ROWCOUNT @PageSize    SELECT  errorId = [ErrorId] ,            application = [Application] ,            host = [Host] ,            type = [Type] ,            source = [Source] ,            message = [Message] ,            [user] = [User] ,            statusCode = [StatusCode] ,            time = CONVERT(VARCHAR(50), [TimeUtc], 126) + 'Z'    FROM    [ELMAH_Error] error    WHERE   [Application] = @Application            AND [TimeUtc] <= @FirstTimeUTC            AND [Sequence] <= @FirstSequence    ORDER BY [TimeUtc] DESC ,            [Sequence] DESC    FOR     XML AUTOGOSET QUOTED_IDENTIFIER OFF GOSET ANSI_NULLS ON GOSET QUOTED_IDENTIFIER ON GOSET ANSI_NULLS ON GOCREATE PROCEDURE [dbo].[ELMAH_LogError]    (      @ErrorId UNIQUEIDENTIFIER ,      @Application NVARCHAR(60) ,      @Host NVARCHAR(30) ,      @Type NVARCHAR(100) ,      @Source NVARCHAR(60) ,      @Message NVARCHAR(500) ,      @User NVARCHAR(50) ,      @AllXml NTEXT ,      @StatusCode INT ,      @TimeUtc DATETIME    )AS     SET NOCOUNT ON    INSERT  INTO [ELMAH_Error]            ( [ErrorId] ,              [Application] ,              [Host] ,              [Type] ,              [Source] ,              [Message] ,              [User] ,              [AllXml] ,              [StatusCode] ,              [TimeUtc]            )    VALUES  ( @ErrorId ,              @Application ,              @Host ,              @Type ,              @Source ,              @Message ,              @User ,              @AllXml ,              @StatusCode ,              @TimeUtc            )GOSET QUOTED_IDENTIFIER OFF GOSET ANSI_NULLS ON GO

 

 

2-3-1

 

 

瀏覽器輸入地址http://localhost:5547/abc123ds

在數據庫輸入腳本并查看結果如下

2-3-2

 

2-3-3

 

SQLite與Oracle的配置與sql server類似,就不重復了,

相關腳本下載地址:https://code.google.com/p/elmah/downloads/list

 

 

2.4 手動記錄錯誤

 

方法:

ErrorSignal.FromCurrentContext().Raise()

 

現在我們創造2個錯誤并記錄

 

修改HomeController如下

using System;using System.Collections.Generic;using System.Linq;using System.Web;using System.Web.Mvc;using Elmah;namespace Jean.ElmahSample.Controllers{    public class HomeController : Controller    {        //        // GET: /Home/        public ActionResult Index()        {            try            {                var t = int.Parse("abc");            }            catch (Exception e)            {                ErrorSignal.FromCurrentContext().Raise(e); // error 1                ErrorSignal.FromCurrentContext().Raise(new ArgumentNullException()); // error 2            }            return View();        }    }}

 

重新生成

瀏覽器輸入 http://localhost:5547

新開窗口輸入 http://localhost:5547/elmah.axd

結果如下

2-3-4


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
久久久久久久激情视频| 91精品国产自产在线老师啪| 国产亚洲在线播放| 欧美中文字幕在线观看| 午夜精品一区二区三区在线播放| 日本sm极度另类视频| 成人精品视频久久久久| 国内精品一区二区三区四区| 国产精欧美一区二区三区| 成人免费在线视频网站| 国产精品日日摸夜夜添夜夜av| 色偷偷亚洲男人天堂| 日韩欧美国产中文字幕| 欧美日韩成人在线视频| 欧美激情手机在线视频| 精品动漫一区二区| 国产亚洲人成a一在线v站| 欧美激情在线观看视频| 久久电影一区二区| 亚洲国产小视频在线观看| 国产午夜精品免费一区二区三区| 国产精品免费久久久久久| 中文字幕在线视频日韩| 国产日产久久高清欧美一区| 91视频国产高清| 亚洲国产精品久久久久秋霞不卡| 日韩国产高清污视频在线观看| 国产精品678| 亚洲成人激情小说| 精品国产一区二区三区久久狼黑人| 亚洲精品自产拍| 欧美激情视频一区| 国产99视频精品免视看7| 91国内揄拍国内精品对白| 中文字幕在线看视频国产欧美在线看完整| 日韩成人激情视频| 91免费的视频在线播放| 欧美最顶级的aⅴ艳星| 久久不射电影网| 热久久这里只有精品| 欧美成人合集magnet| 日韩成人久久久| 久久中文字幕视频| 国产精品日韩一区| 国产在线视频2019最新视频| 亚洲高清一二三区| 精品视频久久久久久久| 亚洲欧美激情精品一区二区| 精品亚洲aⅴ在线观看| 亚洲第一色中文字幕| 久久成年人免费电影| 国产精品色悠悠| 欧美午夜精品在线| 国产精品高潮视频| 亚洲精品视频在线播放| 亚洲国产精品va在线观看黑人| 欧美老女人性视频| 久久免费成人精品视频| 欧美黄色片在线观看| 欧美裸体视频网站| 人人爽久久涩噜噜噜网站| 亚洲аv电影天堂网| 欧美性jizz18性欧美| 国产视频丨精品|在线观看| 疯狂欧美牲乱大交777| 一区二区在线免费视频| 成人午夜高潮视频| 北条麻妃在线一区二区| 精品国产视频在线| 91精品啪aⅴ在线观看国产| 色悠久久久久综合先锋影音下载| 日本亚洲欧洲色α| 日韩免费在线视频| 成人写真视频福利网| 国产精品成人av性教育| 欧美黄色免费网站| 国产精品第二页| 91久久精品国产91久久性色| 97热精品视频官网| 国产精品第七影院| 97精品视频在线观看| 日韩精品日韩在线观看| 黑人巨大精品欧美一区二区三区| 538国产精品一区二区免费视频| 日韩欧美在线看| 91亚洲精品一区| 国产精品成人av在线| 欧美性猛交xxxx免费看漫画| 国产成人精品免高潮在线观看| 亚洲综合小说区| 91高清视频免费| 欧美成人高清视频| 午夜精品久久久久久久99热| 欧美精品videosex极品1| 亚洲午夜色婷婷在线| 亚洲自拍欧美另类| 日韩精品视频免费专区在线播放| 日韩亚洲精品电影| 欧洲成人在线观看| 亚洲v日韩v综合v精品v| 日韩在线免费视频观看| 欧日韩在线观看| 庆余年2免费日韩剧观看大牛| 色视频www在线播放国产成人| 国产成人综合一区二区三区| 中日韩美女免费视频网站在线观看| 色狠狠av一区二区三区香蕉蜜桃| 国产精品91久久久久久| 国产一区深夜福利| 国产欧美va欧美va香蕉在线| 亚洲国产福利在线| 欧美在线观看一区二区三区| 亚洲国产精品久久精品怡红院| 欧美成年人视频网站| 欧美一级视频免费在线观看| 精品久久久av| 欧美成在线观看| 久久人91精品久久久久久不卡| 欧美激情va永久在线播放| 45www国产精品网站| 国产精品v片在线观看不卡| 日韩av电影院| 国产精品第一区| 欧美性xxxxx| 久久人人爽人人爽人人片亚洲| 久久成人精品视频| 精品国产一区二区三区久久久狼| 亚洲精品综合久久中文字幕| 日本精品免费观看| 在线播放日韩精品| 久久久久国产精品免费| 久久久在线观看| 欧美一级高清免费| 亚洲一区中文字幕| 亚洲欧美制服丝袜| 国产成人精品电影久久久| 久久久国产在线视频| 97超视频免费观看| 国产精品电影久久久久电影网| 久久色免费在线视频| 国产一区二区三区视频在线观看| 亚洲人av在线影院| 久久精品国产一区二区电影| 91影视免费在线观看| 555www成人网| 欧美日韩美女在线| 国产精品成人久久久久| 国产精品嫩草影院一区二区| 在线成人激情视频| 欧美国产第二页| 欧美精品免费播放| 日韩中文字幕在线看| 蜜臀久久99精品久久久无需会员| 亚洲成人av在线播放| 奇米4444一区二区三区| 久久久国产精品免费| 亚洲久久久久久久久久久| 精品国产乱码久久久久久天美| 中文字幕日韩在线视频| 成人动漫网站在线观看| 亚洲性av网站| 国产免费观看久久黄| 久久久久久高潮国产精品视| 欧美精品性视频|