1. ASP.net mvc4刚入门,应该建立怎样的学习方法
3层跟MVC不是一类东西。MVC是一种设计模键物式,asp.net mvc是一个mvc实现框架。
建议你先按照MS的基础戚亮弊教程,动动手写一个,能对MVC有个实际上的认识
音乐商店
http://www.asp.net/mvc/tutorials/mvc-music-store
以及电影资料库
http://www.asp.net/mvc/tutorials/mvc-4/getting-started-with-aspnet-mvc4/intro-to-aspnet-mvc-4
有一点高族基础了,可以看Apress 出版社的 Pro ASP.NET MVC4 Framework ,一边看一边动手写,入门并不难的。
2. ASP.NET MVC4大文件下载的问题
刚碰到这个腊拦问题,下面的代码可以直接袜猜拷贝使用。
protected void Page_Load(object sender, EventArgs e)
{
DownFile1(@"D:\常用软件\win7.iso", "win7.iso");
}
private void DownFile1(string filePath, string fileName)
{
ResponseFile(this.Request, this.Response, fileName, filePath, 1024000);
}
// 输出硬盘文件,提供下载
// 输入参数 _Request: Page.Request对告局型象, _Response: Page.Response对象, _fileName: 下载文件名, _fullPath: 带文件名下载路径, _speed 每秒允许下载的字节数
// 返回是否成功
public static bool ResponseFile(HttpRequest _Request, HttpResponse _Response, string _fileName, string _fullPath, long _speed)
{
try
{
FileStream myFile = new FileStream(_fullPath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
BinaryReader br = new BinaryReader(myFile);
try
{
_Response.AddHeader("Accept-Ranges", "bytes");
_Response.Buffer = false;
long fileLength = myFile.Length;
long startBytes = 0;
int pack = 10240; //10K bytes
//int sleep = 200; //每秒5次 即5*10K bytes每秒
int sleep = (int)Math.Floor((double)(1000 * pack / _speed)) + 1;
if (_Request.Headers["Range"] != null)
{
_Response.StatusCode = 206;
string[] range = _Request.Headers["Range"].Split(new char[] { '=', '-' });
startBytes = Convert.ToInt64(range[1]);
}
_Response.AddHeader("Content-Length", (fileLength - startBytes).ToString());
if (startBytes != 0)
{
_Response.AddHeader("Content-Range", string.Format(" bytes {0}-{1}/{2}", startBytes, fileLength - 1, fileLength));
}
_Response.AddHeader("Connection", "Keep-Alive");
_Response.ContentType = "application/octet-stream";
_Response.AddHeader("Content-Disposition", "attachment;filename=" + HttpUtility.UrlEncode(_fileName, System.Text.Encoding.UTF8));
br.BaseStream.Seek(startBytes, SeekOrigin.Begin);
int maxCount = (int)Math.Floor((double)((fileLength - startBytes) / pack)) + 1;
for (int i = 0; i < maxCount; i++)
{
if (_Response.IsClientConnected)
{
_Response.BinaryWrite(br.ReadBytes(pack));
Thread.Sleep(sleep);
}
else
{
i = maxCount;
}
}
}
catch
{
return false;
}
finally
{
br.Close();
myFile.Close();
}
}
catch
{
return false;
}
return true;
}
3. 如何把MVC4 Web应用程序发布到IIS,mvc4iis
一、安装IIS
1.按键盘Win+R,在打开的运行框输入control
2.依次点击:“Programs”=》“Turn Windows features on or off”在打开的对话框中找到“Internet Information Services” 和“Internet Infomation Services Hostable Web Core”两项并勾选。点开”Internet Information Services”的”+” 找到“World Wide Web Services”点击“+”找到Application Development Features 点击“+”找到”ASP.NET 3.5”和“ASP.NET 4.5”勾选。(如不勾选这两项会出现莫名其妙的错误HTTP Error 500.19 - Internal Server Error。哪怕是你机器上本来就已经安装了.NET4.5也不行)
HTTP Error 500.19 - Internal Server Error
3.点击确定,等待安装结束。IIS安装完成
二、发布WEB应用程序
1.右键点击你的WEB应用程序项目,点击“发布”
2.新建配置文件,随便起个名字,此处是MVC4。
“下一步”发布方法选择”文件系统”(PS:我是发布在本机上的,如果你要发布到远程服务器上则根据你的需要选择),“目标位置”选择你网站的存放目录,此处为“G:\WEB\MVC4”
“下一步”配置选择“Release” 点击“发布”,OK,你的网站文件已经生成了。
三、在IIS中添加我们的MVC4
1.打开IIS,在Sites上点右键,添加网站
2.在弹出的对话框中输入Site Name,此处输入“MVC4”选择Application Pool,此处选择”.NET v4.5”
3.选择网站文件存储路径,此处为“G:\WEB\MVC4”
4.设置网站绑定端口,此处设置为:81(默认为80)
5.点击OK,结束。
在浏览器中输入“http://localhost:81/”即可访问
4. ASP.NET MVC 4中如何读取web.config中的配置
用ConfigurationManager这个类。
5. ASP.NET MVC 4框架揭秘:Controller(3)
Controller( )
虽然抽象类中定义了一个表示当前HttpResponse的属性Response 但是当BeginExecute方法执行的时候该属性尚未初始化 所以上面代码中使用的Response属性是我们自行定义的 运行该程序后会在浏览器中呈现出兆袜如图 所示的输出结果 从输出方法的调用顺序中不难看出在默认的情况下Controller是以异步的方式执行的 (S )
图 Controller在默认情况下的异步执行方式
现在按照如下的方式族睁激重写虚属性DisableAsyncSupport 使它直接返回True以关闭对Controller异步执行的支持
public class HomeController : Controller
{
//其他成员
protected override bool DisableAsyncSupport
{
get{return true;}
}
}
再早闹次执行我们的程序将会得到如图 所示的输出结果 可以看出由于HomeController间接地实现了IAsyncController接口 Controller的执行总是以调用BeginExecute/EndExecute方法的方式来执行 但是由于DisableAsyncSupport属性被设置为True BeginExecute方法内部会以同步的方式调用Execute/ExecuteCore方法 (S )
图 Controller在DisableAsyncSupport
属性为True的情况下的同步执行方式
ASP NET MVC应用编程接口中还定义了一个System Web Mvc AsyncController类型 从名称上看 AsyncController是一个基于异步的Controller 但是这里的异步并不是指Controller的异步执行 而是Action方法的异步执行 从如下的代码片段中可以看出 这个直接继承自抽象类Controller的AsyncController是一个 空 类型(没有额外定义和重写基类的类型成员) 在上一个版本中 以XxxAsync/XxxCompleted形式定义的异步Action方法均定义在继承自AsyncController的Controller类型中 考虑到向后兼容性 AsyncController在新的版本中保留下来
public abstract class AsyncController : Controller
{}
只有以传统方式(XxxAsync/XxxCompleted)定义的异步Action方法才需要定义在AsyncController中 ASP NET MVC 提供了新的异步Action方法定义方式 使我们可以通过一个返回类型为Task的方法来定义以异步方式执行的Action 这样的Action方法不需要定义在AsyncController中
返回目录 ASP NET MVC 框架揭秘
编辑推荐
ASP NET开发培训视频教程
Microsoft NET框架程序设计视频教程
Java程序性能优化 让你的Java程序更快 更稳定
lishixin/Article/program/net/201311/16099
6. ASP.NET MVC 4框架:ASP.NET MVC上的Web应用
建立在 迷你版 ASP NET MVC上的Web应用
在正式介绍我们自己创建的 迷你版 ASP NET MVC的实现原理之前 不妨来看看建立在该框架之上的Web应用如何定义 通过Visual Studio创建一个空的ASP NET Web应用(注意不是ASP NET MVC应用)并不会引用System Web Mvc dll这个程序集 所以在接下来的程序中看到的所谓MVC的组件都是我们自行定义的
首先定义了如下一个SimpleModel类型 它表示最终需要绑定到View上的数据 为了验证针对Controller和Action的解析机制 SimpleModel定义的两个属性分别表示当前请求的目标Controller和Action
public class SimpleModel
{
public string Controller { get; set; }
public string Action { get; set; }
}
与真正的ASP NET MVC应用开发一样 我们需要定义Controller类 按照约定的命名方式(以字符 Controller 作为后缀) 我们定义了如下一个HomeController HomeController实现的抽象类型ControllerBase是我们自行定义的 以自定义的ActionResult作为返回类型的Index方法表示Controller的Action 它接受一个SimpleModel类型的对象作为参数 该Action方法返回的ActionResult是一个RawContextResult对象 顾名思义 RawContextResult就是将指定的内容进行原样返回 在这里我们将作为参数的SimpleModel对象的Controller和Action属性显示出来
public class HomeController: ControllerBase
{
public ActionResult Index(SimpleModel model)
{
string content = string Format( Controller: { }<br/>Action:{ }
model Controller model Action)
return new RawContentResult(content)
}
}
ASP NET MVC根据请求地址来解析出用于处理该请求的Controller的类型和Action方法名称 具体来说 我们预注册一些包含Controller和Action名称作为占位符的(相对)地址模板 如果请求地址符合相应地址模板的模式 Controller和Action名称就可以正确地解析出来 和ASP NET MVC应用类似 我们在Global asax中注册了如下一个地址让脊模板({controller}/{action}) 我们还注册了一个用于创建Controller对象的工厂 RouteTable ControllerBuilder和DefaultControllerFactory都是我们自定义的类型
public class Global : System Web HttpApplication
{
protected void Application_Start(object sender EventArgs e)
{
RouteTable Routes Add( default
new Route{Url = {controller}/{action} })
ControllerBuilder Current SetControllerFactory(
new DefaultControllerFactory())
}
}
正如上洞滑旅面所说的 ASP NET MVC是通过一个自定义的HttpMole实现的 在这个 迷你版 ASP NET MVC框架中我纳凳们也将其起名为UrlRoutingMole 在运行Web应用之前 我们需要通过配置对该自定义HttpMole进行注册 下面是相关的配置
<configuration>
<system webServer>
<moles>
<add name= UrlRoutingMole
type= WebApp UrlRoutingMole WebApp />
</moles>
</system webServer>
</configuration>
到目前为止 所有的编程和配置工作已经完成 为了让定义在HomeController中的Action方法Index来处理针对该Web应用的访问请求 我们需要指定与之匹配的地址(符合定义在注册地址模板的URL模式) 如图 所示 由于在浏览器中输入地址(//…/Home/Index)正好对应着HomeController的Action方法Index 所以对应的方法会被执行 而执行的结果就是将当前请求的目标Controller和Action的名称显示出来 (S )
图 采用符合注册的路由地址模板的地址访问Web应用
上面演示了如何在我们自己创建的 迷你版 ASP NET MVC框架中创建一个Web应用 从中可以看到和创建一个真正的ASP NET MVC应用别无二致 接下来我们就来逐步地分析这个自定义的ASP NET MVC框架是如何建立起来的 而它也代表了真正的ASP NET MVC框架的工作原理
返回目录 ASP NET MVC 框架揭秘
编辑推荐
ASP NET开发培训视频教程
Microsoft NET框架程序设计视频教程
Java程序性能优化 让你的Java程序更快 更稳定
Visual C++音频/视频技术开发与实战
lishixin/Article/program/net/201311/16113