不同的返回值类型告诉浏览器以什么样的方式去解析
/// 返回视图
/// 返回视图的时候,必然会调用View视图文件(cshtml文件);
/// cshtml可以被服务器调用到;
/// cshtml可以写html,也可以写后台的C#代码,cshtml是一个类文件~
/// 既可以写后台C#代码也可以写Html===Razor混编;
///
///Mvc在返回视图的时候,最后要生成的是Html标签,控制器中调用view(),寻找对应的视图,根据寻找到的视图来匹配,会用上Layout母版页,在Layout母版页中有一个RenderBody方法,这个方法就是我们返回视图中的内容的占位符;把视图中的内容塞到占位符所在的位置;
/// 在Mvc开发中,返回的类型可能会有不同的类型,但是提供了一个统一的IActionResult接口来作为返回值。
/// 浏览器访问服务器,服务器响应结果,返回的类型可能有多种类型,但是对于浏览器来说,需要明确按照不同的类型的方式来解析展示; 如果是Html 浏览器就要按照html的方式类解读,如果是Xml,浏览器就要按照Xml格式来解析~~
///
/// IActionResult就是为了实现不同的类型返回;不同的类型返回除了需要返回结果,通知也需要告诉浏览器如何解析这个结果。
public ViewResult Index([FromServices] IOptionsMonitor<ConnectionStringOptions> optionsMonitor, [FromServices] IOptions<ConnectionStringOptions> options)
{
//
//text/html; charset=utf-8:浏览器根据他来判断要使用Html的方式来解读返回的结果
//实际返回的是一个视图---Html
//但是告诉浏览器返,用Json的解析方式来解析我这个数据
//HttpContext.Response.ContentType = "application/json; charset=utf-8";
return View(); //找和当前控制器方法匹配的视图文件渲染
//return View("~/Views/A03ReturnValue/IndexView.cshtml");
//return View("~/Views/A03ReturnValue/IndexView.cshtml", optionsMonitor.CurrentValue);
}
/// <summary>
/// Razor视图
/// </summary>
/// <param name="optionsMonitor"></param>
/// <param name="options"></param>
/// <returns></returns>
public IActionResult RazorIndex([FromServices] IOptionsMonitor<ConnectionStringOptions> optionsMonitor, [FromServices] IOptions<ConnectionStringOptions> options)
{
return View();
}
/// <summary>
/// 返回局部视图
/// </summary>
/// <returns></returns>
public PartialViewResult ReturnPartialViewResult()
{
return PartialView();
}
/// <summary>
/// 返回组件
/// http://localhost:5229/A03ReturnValue/IndexComponent
/// </summary>
/// <returns></returns>
public ViewComponentResult IndexComponent()
{
return ViewComponent(typeof(ConfigurationViewComponent));
}
/// <summary>
/// 返回Json对象
/// Content-Type: application/json; charset=utf-8
/// </summary>
/// <param name="optionsMonitor"></param>
/// <param name="options"></param>
/// <returns></returns>
public JsonResult Json([FromServices] IOptionsMonitor<ConnectionStringOptions> optionsMonitor, [FromServices] IOptions<ConnectionStringOptions> options)
{
return Json(optionsMonitor.CurrentValue);
}
/// <summary>
/// 返回文件
/// </summary>
/// <returns></returns>
public FileContentResult FileContent()
{
string fileName = "File/Richard.jpg";
byte[] fileBytes = GetFileData(fileName);
string mimeType = "application/octet-stream";
return new FileContentResult(fileBytes, mimeType)
{
FileDownloadName = fileName
};
}
/// <summary>
/// 返回文件流
/// </summary>
/// <returns></returns>
public FileStreamResult FileStream()
{
string fileName = "File/Richard.jpg";
string mimeType = "application/octet-stream";
using (FileStream fs = new FileStream(fileName, FileMode.Open, FileAccess.Read))
{
return new FileStreamResult(fs, mimeType);
}
}
/// <summary>
/// 读取文件流
/// </summary>
/// <param name="fileUrl"></param>
/// <returns></returns>
private byte[] GetFileData(string fileUrl)
{
FileStream fs = new FileStream(fileUrl, FileMode.Open, FileAccess.Read);
try
{
byte[] buffur = new byte[fs.Length];
fs.Read(buffur, 0, (int)fs.Length);
return buffur;
}
catch (Exception ex)
{
//MessageBoxHelper.ShowPrompt(ex.Message);
return null;
}
finally
{
if (fs != null)
{
//关闭资源
fs.Close();
}
}
}
/// <summary>
/// 返回字符串
/// </summary>
/// <returns></returns>
public string ReturnString()
{
return "返回字符串--ReturnString";
}
/// <summary>
/// 返回字符串
/// </summary>
/// <returns></returns>
public ContentResult ReturnStringContent()
{
return new ContentResult()
{
Content = "返回字符串-ReturnStringContent"
};
}
/// <summary>
/// 返回空值
/// </summary>
/// <returns></returns>
public EmptyResult ReturnNullEmptyResult()
{
return new EmptyResult();
}