ASP.NET Forums 2.0 修改集锦(二)

转载 2004年08月30日 14:47:00

今天我们要说的是“如何将论坛附件直接以文件形式保存,并读取照片文件的Exif信息;”

废话少说,直接进入主题:regular_smile.gif
      准备工作:下载PhotoProperties类库,用于读取Exif信息,在Components中引用该类库

1、修改web.config配置文件,在forums/forums下增加一个配置项
      uploadFilesPath="/Upload/"
      值可以自行修改,用来保存用户上传的文件;

2、修改数据库
      forums_PostAttachments表增加如下字段
      DiskFileName nvarchar(256),  保存附件在硬盘上的文件名
      Exif  nvarchar(200),    用于保存照片附件的Exif信息
      CheckGuid nvarchar(50)     用于保存检测的Guid
      注意:我们修改的最终方案是会删除原有的Content字段的

      修改存储过程:

None.gifcreate procedure forums_PostAttachment_Add 
None.gif(
None.gif    @PostID 
int
,
None.gif    @UserID 
int
,
None.gif    @ForumID 
int
,
None.gif    @Filename 
nvarchar(256
),
None.gif    @DiskFileName 
nvarchar(256
),
None.gif    @ContentType 
nvarchar(50
),
None.gif    @ContentSize 
int
,
None.gif    @Exif 
nvarchar(500
),
None.gif    @CheckGuid 
nvarchar(50
)
None.gif)
None.gif
AS
None.gif
BEGIN
None.gif
None.gif    
IF EXISTS (SELECT PostID FROM forums_PostAttachments WHERE PostID = @PostID)
None.gif        
RETURN

None.gif
None.gif    
INSERT INTO 
None.gif        forums_PostAttachments
None.gif    (
None.gif        PostID,
None.gif        ForumID,
None.gif        UserID,
None.gif        
[FileName]
,
None.gif        DiskFileName,
None.gif        ContentType,
None.gif        ContentSize,
None.gif        Exif,
None.gif        CheckGuid
None.gif    )
None.gif    
VALUES

None.gif    (
None.gif        @PostID,
None.gif        @ForumID,
None.gif        @UserID,
None.gif        @Filename,
None.gif        @DiskFileName,
None.gif        @ContentType,
None.gif        @ContentSize,
None.gif        @Exif,
None.gif        @CheckGuid
None.gif    )
None.gif
None.gif
END
None.gifNone.gif
None.gif
GO
None.gif
SET QUOTED_IDENTIFIER OFF 
None.gif
GO

None.gif
SET ANSI_NULLS ON 
None.gif
GO

None.gif
None.gif
SET QUOTED_IDENTIFIER ON 
None.gif
GO

None.gif
SET ANSI_NULLS ON 
None.gif
GO


     
3、修改系统配置管理类Components项目下的Configuration/ForumConfiguration.cs文件:
      1)在头部增加一变量

None.gifstring uploadFilesPath="/Upload/";
      2)在LoadValuesFromConfigurationXml方法里增加以下代码,读取配置文件中的值:
None.gifuploadFilesPath = attributeCollection["uploadFilesPath"].Value;
      3)给ForumConfiguration类增加UploadFilesPath属性:
ExpandedBlockStart.gif public string UploadFilesPath get return uploadFilesPath; } }
None.gif
      配置文件部分完成。

4、修改Components项目下的PostAttachment类
      增加如下引用:
None.gifusing System.IO;
None.gif
using JSG.PhotoPropertiesLibrary;

      增加如下变量:     
None.gifstring exif;
None.gif
string diskFileName;        
None.gif
string checkGuid;
     
     增加如下方法:
ExpandedBlockStart.gif/// <summary>
InBlock.gif        
/// 获取文件的Exif信息
InBlock.gif        
/// </summary>

InBlock.gif        
/// <param name="postedFile"></param>
ExpandedBlockEnd.gif        
/// <returns></returns>

None.gif        private string GetExif(string ContentType,string FullFileName) 
ExpandedBlockStart.gif        
{
InBlock.gif            
InBlock.gif            
InBlock.gif            
string imgFilePath =
 FullFileName;
InBlock.gif            
string exif=""
;
InBlock.gif            
InBlock.gif            
try

ExpandedSubBlockStart.gif            
{
InBlock.gif                PhotoProperties pp 
= new
 PhotoProperties();
InBlock.gif
InBlock.gif                pp.Initialize();
InBlock.gif                pp.Analyze(imgFilePath);
InBlock.gif                        
InBlock.gif                
if(ContentType.ToLower() == "image/pjpeg"
)
ExpandedSubBlockStart.gif                
{
InBlock.gif                    
//Exif Version

InBlock.gif
                    exif += "Exif版本:" +  pp.GetTagDatum(36864).PrettyPrintValue;
InBlock.gif
InBlock.gif                    
//制造商

InBlock.gif
                    exif += " 制造商:" + pp.GetTagDatum(271).PrettyPrintValue;
InBlock.gif
InBlock.gif                    
//型号

InBlock.gif
                    exif += " 型号:" + pp.GetTagDatum(272).PrettyPrintValue;
InBlock.gif
InBlock.gif                    
//拍摄时间

InBlock.gif
                    exif += " 拍摄时间:" + pp.GetTagDatum(36868).PrettyPrintValue;
InBlock.gif
InBlock.gif                    
//暴光时间:

InBlock.gif
                    exif += "<BR>暴光时间:" +  pp.GetTagDatum(33434).PrettyPrintValue + "";
InBlock.gif
InBlock.gif                    
//光圈

InBlock.gif
                    exif += " 光圈:" + pp.GetTagDatum(33437).PrettyPrintValue;
InBlock.gif
InBlock.gif                    
//ISO

InBlock.gif
                    exif += "  ISO:" + pp.GetTagDatum(34855).PrettyPrintValue;
InBlock.gif
InBlock.gif                    
//分辨率

InBlock.gif
                    exif += " 分辨率:" +  pp.GetTagDatum(282).PrettyPrintValue + "/" +  pp.GetTagDatum(283).PrettyPrintValue;
ExpandedSubBlockEnd.gif                }

ExpandedSubBlockEnd.gif            }

ExpandedSubBlockStart.gif            
catch{}
InBlock.gif
InBlock.gif            
return exif;
ExpandedBlockEnd.gif        }
       在构造函数的最下面增加:
None.gifstring uploadPath = HttpContext.Current.Server.MapPath("~" + AspNetForums.Configuration.ForumConfiguration.GetConfig().UploadFilesPath);
InBlock.gif            uploadPath 
+= "/" + Users.GetUser().UserID.ToString() + "/"
;
InBlock.gif            
if(!
System.IO.Directory.Exists(uploadPath))
ExpandedSubBlockStart.gif            
{
InBlock.gif                System.IO.Directory.CreateDirectory(uploadPath);
ExpandedSubBlockEnd.gif            }

InBlock.gif        
InBlock.gif            
//HttpContext.Current.User.Identity
InBlock.gif
            
InBlock.gif            diskFileName 
=  System.Guid.NewGuid().ToString() +
 System.IO.Path.GetExtension(postedFile.FileName);
InBlock.gif            uploadPath 
+=
 diskFileName;
InBlock.gif            
InBlock.gif            postedFile.SaveAs(uploadPath);
exif = GetExif(contentType,uploadPath);
None.gifcheckGuid 
= System.Guid.NewGuid().ToString();
      
      最后增加3个属性,代码如下:
ExpandedBlockStart.gif        /// <summary>
InBlock.gif        
/// 磁盘文件名(文件保存在硬盘上的物理文件名)
InBlock.gif        
///
 37AE8655-05F8-4ed9-A771-35B41F0222DE.ext
ExpandedBlockEnd.gif        
/// </summary>

None.gif        public string DiskFileName
ExpandedBlockStart.gif        
{
InBlock.gif            
get

ExpandedSubBlockStart.gif            
{
InBlock.gif                
return
 diskFileName;
ExpandedSubBlockEnd.gif            }

InBlock.gif            
set
ExpandedSubBlockStart.gif            
{
InBlock.gif                diskFileName 
=
 value;
ExpandedSubBlockEnd.gif            }

ExpandedBlockEnd.gif        }

None.gif
ExpandedBlockStart.gif        
/// <summary>
InBlock.gif        
/// 照片Exif信息
ExpandedBlockEnd.gif        
/// </summary>

None.gif        public string Exif 
ExpandedBlockStart.gif        
{
InBlock.gif            
get
 
ExpandedSubBlockStart.gif            
{
InBlock.gif                
return
 exif;
ExpandedSubBlockEnd.gif            }

InBlock.gif            
set 
ExpandedSubBlockStart.gif            
{
InBlock.gif                exif 
=
 value;
ExpandedSubBlockEnd.gif            }

ExpandedBlockEnd.gif        }

None.gif
ExpandedBlockStart.gif        
/// <summary>
InBlock.gif        
/// 用于判断是否要以attachment形式让用户下载附件
ExpandedBlockEnd.gif        
/// </summary>

None.gif        public string CheckGuid
ExpandedBlockStart.gif        
{
InBlock.gif            
get

ExpandedSubBlockStart.gif            
{
InBlock.gif                
return
 checkGuid;
ExpandedSubBlockEnd.gif            }

InBlock.gif            
set
ExpandedSubBlockStart.gif            
{
InBlock.gif                checkGuid 
=
 value;
ExpandedSubBlockEnd.gif            }

ExpandedBlockEnd.gif        }

5、下面要修改的是负责系统数据库操作的SqlDataProvider项目,用于完成对新增加字段的数据库操作,修改如下:
    找到public override void AddPostAttachment(Post post, PostAttachment attachment)方法:
None.gif//增加DiskFileName字段,用于附件在硬盘上的保存文件名,
None.gif
//
类似1990ffb3-3992-4438-b7e2-2bca963d969f.jpg
None.gif
//该文件名不暴露给最终用户

None.gif
myCommand.Parameters.Add("@DiskFileName", SqlDbType.NVarChar, 256).Value = attachment.DiskFileName;
None.gif
//
注释掉对Content的操作
None.gif
//
myCommand.Parameters.Add("@Content", SqlDbType.Image).Value = attachment.Content;
None.gif
None.gif
//增加照片Exif信息与用于验证的CheckGuid字段

None.gif
myCommand.Parameters.Add("@Exif",SqlDbType.NVarChar,500).Value = attachment.Exif;
None.gifmyCommand.Parameters.Add(
"@CheckGuid",SqlDbType.NVarChar,500).Value = attachment.CheckGuid;
     注意:这里需要注释掉对Content字段的操作,因为虽然数据字段还在,但上面修改的存储过程中,我们已经删除了对Content字段的操作;

6、修改Components项目下的ForumsDataProvider类中的PopulatePostAttachmentFromIReader方法,完成从数据库到对象的转换,修改如下:
None.gif//删除Content字段,附件内容不再保存到数据库,而是直接以文件形式保存到硬盘
None.gif
//
 attachment.Content      = (byte[]) reader["Content"];
None.gif
None.gif
//
增加DiskFileName字段,用于附件在硬盘上的保存文件名,
None.gif
//
类似1990ffb3-3992-4438-b7e2-2bca963d969f.jpg
None.gif
//该文件名不暴露给最终用户

None.gif
attachment.DiskFileName = (string) reader["DiskFileName"].ToString();
None.gif
None.gif
//增加照片Exif信息与用于验证的CheckGuid字段

None.gif
if(reader["Exif"!= DBNull.Value)
ExpandedBlockStart.gif
{
InBlock.gif    attachment.Exif        
= (string) reader["Exif"
];
ExpandedBlockEnd.gif}

None.gifattachment.CheckGuid    
= (string) reader["CheckGuid"].ToString();


7、到此数据的操作部分已经都完成了,下面要做的就是修改显示部分,系统最终显示帖子内容是通过Controls下的TextPost类完成的,我们要修改的代码当然也在这里了。
      找到InitializeSkin方法中的body.Text = post.FormattedBody;,在他下面增加如下代码:
None.gif            //判断附件的mime类型是否为图片,如果为图片,那么直接调用DisplayImage方法生成显示图片的HTML代码
None.gif            
//此处可扩充直接显示附件为Flash等其他类型的文件

None.gif
            string Attachment=post.AttachmentFilename;
None.gif            
if (Attachment!="" && Attachment!=null
)
ExpandedBlockStart.gif            
{
InBlock.gif                AspNetForums.Components.PostAttachment attachment 
=
 Posts.GetAttachment(post.PostID);
InBlock.gif                
string contentType =
 attachment.ContentType;
InBlock.gif                
if (contentType=="image/pjpeg"
 
InBlock.gif                    
|| contentType=="image/gif"

InBlock.gif                    
|| contentType=="image/bmp" 
InBlock.gif                    
|| contentType=="image/x-png"
 )
ExpandedSubBlockStart.gif                
{
InBlock.gif                    
InBlock.gif                    body.Text 
+= DisplayImage(Globals.GetSiteUrls().PostAttachment(post.PostID) + "&guid=" + attachment.CheckGuid);  
InBlock.gif        
InBlock.gif                
InBlock.gif                    
//显示Exif信息

InBlock.gif
                    if(attachment.Exif.Length>0)
ExpandedSubBlockStart.gif                    
{
InBlock.gif                        body.Text 
+= "<span class=exif>" + attachment.Exif + "</span>"
;
ExpandedSubBlockEnd.gif                    }

ExpandedSubBlockEnd.gif                }

ExpandedBlockEnd.gif            }
      DisplayImage方法很简单,代码如下,自己可以修改该代码,给图片增加边框等
ExpandedBlockStart.gif/// <summary>
InBlock.gif
/// 如果附件为图片类型,那么调用该方法,生成显示图片的HTML代码
InBlock.gif
/// </summary>

InBlock.gif
/// <param name="ImageFilePath">要显示的图片路径</param>
ExpandedBlockEnd.gif
/// <returns></returns>

None.gifpublic string DisplayImage(string ImageFilePath)
ExpandedBlockStart.gif    
{
InBlock.gif                
return "<a href='" + ImageFilePath + "' target='_blank'><img  src="" + ImageFilePath + "" border=0></a>"
;
ExpandedBlockEnd.gif        }

8、修改附件下载部分,Controls项目下的DownloadPostAttachment类,代码如下:
 
None.gif            System.Web.HttpContext.Current.Response.Clear();
None.gif            System.Web.HttpContext.Current.Response.ContentType 
= attachment.ContentType;
None.gif            
None.gif
None.gif            
//
判断用户从QueryString提交的Guid值是否和数据库的CheckGuid是否相同
None.gif            
//
如果相同,那么不以attachment的形式输出,直接显示文件(通常提供该Guid值的情况都是为图片附件)
None.gif            
//如果不同,那么以attachment形式输出,直接由用户下载

None.gif
            if(forumContext.CheckGuid != attachment.CheckGuid)
ExpandedBlockStart.gif            
{
InBlock.gif                System.Web.HttpContext.Current.Response.AppendHeader(
"content-disposition""attachment; filename="" + System.Web.HttpUtility.UrlEncode(attachment.FileName,System.Text.Encoding.UTF8) + """
);
ExpandedBlockEnd.gif            }

None.gif
None.gif            
//System.Web.HttpContext.Current.Response.OutputStream.Write(attachment.Content, 0, attachment.Length);
None.gif
                        
None.gif            
string diskFileName = System.Web.HttpContext.Current.Server.MapPath("~/" + AspNetForums.Configuration.ForumConfiguration.GetConfig().UploadFilesPath + "/" + attachment.UserID.ToString() + "/" +
 attachment.DiskFileName);
None.gif            System.Web.HttpContext.Current.Response.WriteFile(diskFileName);
None.gif            System.Web.HttpContext.Current.Response.End();


9、最后要修改的是ForumContext类,要对该类增加一个属性,用于读取通过QueryString传递的Guid值,找到Components项目下的ForumContext类,
      首先增加一变量:
None.gifstring checkGuid =  "";
     在构造函数的最下面增加:
None.gifcheckGuid = context.Request.QueryString["guid"];
     在最下面增加属性:
None.gif//CheckGuid 判断是否合法的显示文件请求
ExpandedBlockStart.gif
public string CheckGuid get return checkGuid; } }


至此,我们的修改工作已经全部完成,下面要做的就是对原有的数据库进行升级,将Content字段中的数据保存到硬盘,下面的代码比较简单了,直接贴出代码 regular_smile.gif
在web项目下增加一个页面,后台的操作代码如下,代码比较简单,都是直接操作数据库的。不要忘记增加对PhotoProperties的引用,
None.gifusing System;
None.gif
using
 System.Collections;
None.gif
using
 System.ComponentModel;
None.gif
using
 System.Data;
None.gif
using
 System.Data.SqlClient;
None.gif
using
 System.Drawing;
None.gif
using
 System.Web;
None.gif
using
 System.Web.SessionState;
None.gif
using
 System.Web.UI;
None.gif
using
 System.Web.UI.WebControls;
None.gif
using
 System.Web.UI.HtmlControls;
None.gif
None.gif
using
 System.IO;
None.gif
using
 JSG.PhotoPropertiesLibrary;
None.gif
None.gif
namespace
 AspNetForums.Update
ExpandedBlockStart.gif
{
ExpandedSubBlockStart.gif    
/// <summary>
InBlock.gif    
/// update_20040807 的摘要说明。
ExpandedSubBlockEnd.gif    
/// </summary>

InBlock.gif    public class update_20040807 : System.Web.UI.Page
ExpandedSubBlockStart.gif    
{
InBlock.gif        
protected
 System.Web.UI.WebControls.Button Button1;
InBlock.gif    
InBlock.gif        
private void Page_Load(object
 sender, System.EventArgs e)
ExpandedSubBlockStart.gif        
{
InBlock.gif            
// 在此处放置用户代码以初始化页面

ExpandedSubBlockEnd.gif
        }

InBlock.gif
ContractedSubBlock.gif        
Web 窗体设计器生成的代码
InBlock.gif
InBlock.gif        
private void Button1_Click(object sender, System.EventArgs e)
ExpandedSubBlockStart.gif        
{
InBlock.gif            
InBlock.gif            
string ConnectionString = "database=forums;server=dbserver;User ID=sa;Password=;"
;
InBlock.gif
InBlock.gif            SqlConnection myConn 
= new
 SqlConnection(ConnectionString);
InBlock.gif            myConn.Open();
InBlock.gif
InBlock.gif            
InBlock.gif            
InBlock.gif            
string select="select * from forums_PostAttachments"
;
InBlock.gif            SqlCommand myComm 
= new
 SqlCommand(select,myConn);
InBlock.gif
InBlock.gif            SqlDataReader dr 
=
 myComm.ExecuteReader();
InBlock.gif            
string
 DiskFileName,CheckGuid,Exif;
InBlock.gif            
string UpdateString="Update forums_PostAttachments SET DiskFileName='{0}',Exif='{1}',CheckGuid='{2}' where PostID={3}"
;
InBlock.gif            
string
 UserID;
InBlock.gif            
byte
[] fileContent;
InBlock.gif            FileStream fs
=null
;
InBlock.gif
InBlock.gif
InBlock.gif
InBlock.gif
InBlock.gif
InBlock.gif
InBlock.gif
InBlock.gif            SqlConnection myConn2 
= new
 SqlConnection(ConnectionString);
InBlock.gif            myConn2.Open();
InBlock.gif
InBlock.gif
InBlock.gif
InBlock.gif            
while
(dr.Read())
ExpandedSubBlockStart.gif            
{
InBlock.gif                UserID
=dr["UserID"
].ToString();
InBlock.gif                fileContent 
= (byte[])dr["Content"
];
InBlock.gif                DiskFileName 
= Server.MapPath("~/" + AspNetForums.Configuration.ForumConfiguration.GetConfig().UploadFilesPath + "/" + UserID + "/" + System.Guid.NewGuid().ToString()) + System.IO.Path.GetExtension(dr["FileName"
].ToString());
InBlock.gif                
InBlock.gif                CheckGuid 
=
 System.Guid.NewGuid().ToString();
InBlock.gif
InBlock.gif                fs
=new
 FileStream(DiskFileName ,FileMode.Create,FileAccess.Write, FileShare.ReadWrite);
InBlock.gif                fs.Write(fileContent,
0
,fileContent.Length);
InBlock.gif                fs.Close();
InBlock.gif                Exif 
=
 GetExif(DiskFileName);
InBlock.gif
InBlock.gif                SqlCommand myComm2 
= new SqlCommand(string.Format(UpdateString,System.IO.Path.GetFileName(DiskFileName),Exif,CheckGuid,dr["PostID"
].ToString()),myConn2);
InBlock.gif                myComm2.ExecuteNonQuery();
InBlock.gif                
ExpandedSubBlockEnd.gif            }

InBlock.gif            dr.Close();        
ExpandedSubBlockEnd.gif        }

InBlock.gif
InBlock.gif
InBlock.gif        
private string GetExif(string diskFileName) 
ExpandedSubBlockStart.gif        
{
InBlock.gif            
InBlock.gif            
string imgFilePath =
 diskFileName;
InBlock.gif            PhotoProperties pp 
= new
 PhotoProperties();
InBlock.gif
InBlock.gif            
string exif=""
;
InBlock.gif            
try

ExpandedSubBlockStart.gif            
{
InBlock.gif                pp.Initialize();
InBlock.gif                pp.Analyze(imgFilePath);
InBlock.gif            
InBlock.gif                
//Exif Version

InBlock.gif
                exif += "Exif版本:" +  pp.GetTagDatum(36864).PrettyPrintValue;
InBlock.gif
InBlock.gif                
//制造商

InBlock.gif
                exif += " 制造商:" + pp.GetTagDatum(271).PrettyPrintValue;
InBlock.gif
InBlock.gif                
//型号

InBlock.gif
                exif += " 型号:" + pp.GetTagDatum(272).PrettyPrintValue;
InBlock.gif
InBlock.gif                
//拍摄时间

InBlock.gif
                exif += " 拍摄时间:" + pp.GetTagDatum(36868).PrettyPrintValue;
InBlock.gif
InBlock.gif
InBlock.gif                
//暴光时间:

InBlock.gif
                exif += "<BR>暴光时间:" +  pp.GetTagDatum(33434).PrettyPrintValue + "";
InBlock.gif
InBlock.gif                
//光圈

InBlock.gif
                exif += " 光圈:" + pp.GetTagDatum(33437).PrettyPrintValue;
InBlock.gif
InBlock.gif                
//ISO

InBlock.gif
                exif += "  ISO:" + pp.GetTagDatum(34855).PrettyPrintValue;
InBlock.gif
InBlock.gif                
//分辨率

InBlock.gif
                exif += " 分辨率:" +  pp.GetTagDatum(282).PrettyPrintValue + "/" +  pp.GetTagDatum(283).PrettyPrintValue;
ExpandedSubBlockEnd.gif            }

ExpandedSubBlockStart.gif            
catch{}
InBlock.gif
InBlock.gif            
return exif;
ExpandedSubBlockEnd.gif        }

ExpandedSubBlockEnd.gif    }

ExpandedBlockEnd.gif}

None.gif

      别忘了最后一步工作,删除forums_PostAttachments表中的Content字段,因为我们不再需要他了。
      完工!     regular_smile.gifcoffee.gif

asp.net web api 2.0 实现跨域资源共享

asp.net web api 2 对跨域资源共享的支持1. 同源策略:同源策略是浏览器为保证安全最基本的功能, 只有同源的脚本才能够被执行,那么什么是同源呢?同源是指协议,域名以及端口号都相同,任何...
  • zhanxueguang
  • zhanxueguang
  • 2015年07月09日 20:47
  • 1350

Asp.Net Core 2.0 生成操作数据库文件需要的文件

开发环境 VS2017 + Win7 x64 生成操作数据库文件需要配置或添加的文件 1、Startup.cs public IConfiguration Configuratio...
  • king_hh
  • king_hh
  • 2017年12月29日 16:50
  • 80

IIS6.0手动安装与配置asp.net2.0全过程

这个问题不是很新了,但是相信对一些新手来说还是有一定难度的,或是一些程序员本身就没有机会接触到这块,正好今天 我配置计算机,把这个过程记录下来,希望以后能用的上,也希望能给大家带来一点帮助(本次试用的...
  • szyone
  • szyone
  • 2013年07月04日 14:38
  • 657

ASP.NET2.0轻松搞定统计图表

主页:http://blog.csdn.net/21aspnet/           时间:2007.3.27 本文讲述如何绘制条形图,折线图,柱形图,面积图等常见图形。 效果图: ...
  • jsjpanxiaoyu
  • jsjpanxiaoyu
  • 2015年03月22日 01:23
  • 1479

配置asp.net 2.0的项目到IIS7

首先碰到以下问题: 无法读取配置节"system.web.extensions",因为它缺少节声明 在微软的论坛找到了解决的办法: http://forums.asp.net/p/1...
  • orichisonic
  • orichisonic
  • 2015年11月10日 13:54
  • 584

[译]ASP.NET Core 2.0 带初始参数的中间件

问题 如何在ASP.NET Core 2.0向中间件传入初始参数? 答案 在一个空项目中,创建一个POCO(Plain Old CLR Object)来保存中间件所需的参数: pu...
  • sD7O95O
  • sD7O95O
  • 2017年10月25日 00:00
  • 162

asp.net identity(微软首推的身份验证)2.0分析-基于vs2015默认程序

因为总是感觉,asp.net identity用起来不太舒服,比如代码的扩展性,以及维护以后的版本,所以对其进行分析 下面进入正文: 在vs2015自带的默认程序中,App_Start/Ident...
  • loongsking
  • loongsking
  • 2017年02月05日 17:50
  • 871

jQuery1.9及2.0问答集锦

为什么jQuery核心团队不再支持旧版本的IE了(IE6/7/8)? 我们没有不支持!明年发布的jQuery 1.9将继续支持旧版本的IE。即使在jQuery 2.0发布以后,jQuery团队也会继...
  • WQ560
  • WQ560
  • 2013年01月25日 10:23
  • 427

ASP.NET Web API的版本化与安全性

使用Web API来构建Web 服务,是一件非常容易的事情。Web API使用Http协议, 具备良好的可访问性,尤其适于部署到internet.  作为服务,就有一个版本化和安全性的问题。...
  • cassaba
  • cassaba
  • 2015年08月05日 10:36
  • 2925

asp.net系统增加用户登录后修改密码的功能

[size=xx-large][size=large]1、增加用户登录后修改密码的功能 a)前台添加控件             /*按钮的样式*/         .savebnt ...
  • qq1162195421
  • qq1162195421
  • 2013年08月17日 11:14
  • 2823
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:ASP.NET Forums 2.0 修改集锦(二)
举报原因:
原因补充:

(最多只允许输入30个字)