FileResult,JavaScriptResult,JsonResult

ASP.NET MVC 文件处理与JSON返回
本文介绍ASP.NET MVC中处理文件响应的方法,包括不同类型的FileResult使用场景及注意事项,同时探讨如何通过JavaScriptResult和JsonResult返回特定内容。

FileResult:可以响应任意文档的属性,包括二进制格式的数据,eg:图档,pdf,excel,zip,可以传入byte[],文档路径,Stream等不同的属性,让mvc将属性回传给客户端,除此之外,还能指定回传时的属性类别或指定客户端下载时要显示的文件名等。

 
实际分为三中:
FilePathResult:响应一个实体文档的属性
FileContentResult:回应一个byte[]的属性。
FileStreamResult:回应一个Stream属性。
 
file辅助方法可以自动选定以上不同的FileResult响应。
eg:r如果想通过Action输出一个放在App_data目录下的PNG图文件,
public ActionResult GetFile(){
return File(Server.MapPath("~/App_data/UserA/Avatar.png"),"image/png");
}
 
如果想让浏览器直接下载文件而不是直接在浏览器开启文件,也可以传入要求下载的文档吗在第三个参数,例如pdf文档来自于数据库,并希望让使用者下载,可以先取得一个byte[]或者stream数据,并在File辅助方法的第二个参数指定正确的Content-type,最后再指定要下载的文档名
eg:
public ActionResult GetFile()
{
byte[] fileContent=GetFileByteArray/FromDB();
return File(fileContent,"application/pdf","YourReport.pdf");//第三个参数 文档名可以是中文
//但是mvc是一句RFX2331的规范来设置中文编码,而RFC2231规范对许多旧版浏览器(ie6,旧版本的safari与chrome)来说并不支持这种http Header Value的编码格式,所以对于旧版本处理中文名称的就要这样
return File(fileContent,"application/pdf",Server.UrlPathEncode("你的报表.txt"));(只对ie有效)
 
}
当使用者单击这个action的网址时,会得到一个是否下载文件的提示。
 
 
JavaScriptResult:响应js程序代码给浏览器,通过ajax的程序开发,可以利用JavaScriptResult来响应适当的JavaScript程序代码让浏览器动态运行,其实JavaScriptResult的功能与ContentResult差不多,主要的差别在于默认的Content-Type不一样而已,JavaScriptResult默认的Content-Type为application/x-javascript。
eg:
public ActionResult JavaScript(){
return JavaScript("alert('ok')");
}
在view中利用ajax辅助方法撰写:@Ajax.ActionLink(" run javascript ","javascript", new AjaxOptions())
注意:在mvc4默认网络项目模板中运行这段程序,记得在主板页面_Layout.cshtml的head标签里装入正确的js函数库才能正常运行@Aja.ActionLink辅助方法
@Scripts.Render("~/bundles/jquery")
@Scripts.Render("~/bundles/jqueryval")
 
 
JsonResult :JavaScript Object Notation是web在实作ajax应用程序时经常使用的一种传输数据格式,jsonResult可自动将任意对象数据串行化成JSON格式回传,JsonResult默认contenttype为application/json,
对某些JavaScriptFramework这是必要需求,eg:jquery
JsonResult是使用JavaScriptSerializer完成JSON串行操作,但如果你的对象无法串行化,这个转换的过程将会例外。
注意:为了避免JSONHijacking的攻击,mvc基于安全考虑在默认情况下任何一JsonResult的回传要求都不允许HTTP GET取得任何JSON信息。
eg:
public ActionResult JSON()
{
return Json(new {
id=1,
name="Will",
Createdon=DateTime.Now
});
}
使用httpPost得到:{“id”:1,"name":"will",..."}
 
经常使用jq动态取得json数据,在jq中有$.getJSON就是用get方法动态取得JSON数据,如果JsonResult没有热别设置将会导致无法正常取得JSON信息,jq中没有内建$.postJSON,但非常容易实作
Jquery.post官方网站提供的演示:
$.postJSON=function(url,data,callback)
{
$.post(url,data,callback,"json");
}
就可以通过这样新增$.postJSON方法,使用与getJSON一模一样,可以参考http://api.jquery.com/jQuery.getJSON/
 
小结:
出于安全考虑,尽量避免使用httpget去获取json数据,但是只使用HTTPPOST取得JSON也有一个问题,那就是从服务器端取回的数据无法被浏览器缓存,如果你的信息敏感度不高且想操作缓存的话,可能还需要让JsonResult可以对httpget要求进行相应,解决办法就是替JSON辅助方法再加上一个JsonRequestBehavior列举参数,这样就可以通过get获取json数据了。
eg:
public ActionResult JSON()
{
return Json(new {
id=1,
name="Will",
Createdon=DateTime.Now,
}
JsonRequestBehavior.AllowGet
);
}

转载于:https://www.cnblogs.com/jinhaoObject/p/4597731.html

### JsonResult 的基本用法和返回 JSON 数据的实现 在 ASP.NET MVC 或 .NET Core 中,`JsonResult` 是用于从控制器动作方法返回 JSON 格式数据的一种机制。它允许开发者将数据序列化为 JSON 格式,并将其发送到客户端,通常用于 AJAX 请求的响应处理。例如,一个返回 JSON 数据的控制器方法可以如下实现: ```csharp public JsonResult GetBlogDataJson(string selectedCategory = "All") { var data = GetBlog(selectedCategory); return Json(data, JsonRequestBehavior.AllowGet); } ``` 此代码片段中,`GetBlogDataJson` 方法通过调用 `GetBlog` 函数获取数据,并使用 `Json` 方法将数据转换为 JSON 格式返回。`JsonRequestBehavior.AllowGet` 参数允许此方法响应 GET 请求,通常为了安全考虑,默认情况下是不允许 GET 请求返回 JSON 数据的 [^1]。 ### 在 .NET Core 中使用 JsonResult 的注意事项 在 .NET Core 中,`JsonResult` 的使用方式略有不同,因为 `JsonRequestBehavior` 已被移除。在 .NET Core 6.0 中,控制器方法返回 JSON 数据可以如下所示: ```csharp [HttpGet] [ActionFilterInfo] public IActionResult GetApi(string name) { return new JsonResult(new { name = $"您输入名字是:{name}" }); } ``` 此代码片段展示了如何在 .NET Core 中使用 `JsonResult` 返回 JSON 数据。需要注意的是,如果请求失败,可能是因为返回的 JSON 数据格式不符合客户端期望的格式,或者存在其他序列化问题 [^2]。 ### JsonResult 在 PHP 中的等效实现 虽然 PHP 中没有直接等效于 `JsonResult` 的概念,但可以通过手动构造 JSON 数据并将其输出来实现类似的功能。例如: ```javascript data: { id: obj.attr("id"), actionName: obj.attr("actionName"), actionValue: obj.attr("actionValue") } ``` 此代码片段展示了一个 JavaScript 对象,它通常用于 AJAX 请求中作为发送到服务器的数据。在 PHP 中,可以通过 `json_encode` 函数将 PHP 数组转换为 JSON 格式,并通过 `echo` 输出,从而实现与 ASP.NET MVC 中 `JsonResult` 类似的功能 [^3]。 ### 处理 JsonResult 序列化问题 当使用 `JsonResult` 返回数据时,可能会遇到序列化问题,尤其是当数据包含循环引用或者复杂类型时。为了解决这些问题,可以采取以下措施: - **自定义序列化逻辑**:在返回 JSON 数据之前,对数据进行预处理,确保其可以被正确序列化。 - **使用特定的 JSON 序列化库**:在 .NET Core 中,可以使用 `System.Text.Json` 或 `Newtonsoft.Json`(Json.NET)来处理更复杂的序列化需求。 - **检查数据结构**:确保返回的数据结构简单且没有循环引用,这有助于避免序列化错误。 ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值