.Net MVC4 使用心得(六)WebApi Json和Xml,razor@{}

2024-01-30 00:48

本文主要是介绍.Net MVC4 使用心得(六)WebApi Json和Xml,razor@{},希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

    在写js通过ajax调用api时,使用了webapi。

    webapi是个mvc4中的新玩意儿。他的路由定义单独放在了WebApiConfig.cs中,并且先于普通controller的路由注册,以便匹配。

    WebApiConfig.cs中只有一个Register方法,只有这么几行:

            config.Routes.MapHttpRoute(name: "DefaultApi",routeTemplate: "api/{controller}/{id}",defaults: new { id = RouteParameter.Optional });
    这里,只注册到了controller,没有到action,因为api的action名称是有约定的。

    webapi大约有这样的约定:

    action名称中有get的,0参数,匹配路由到/控制器
    action名称中有get的,1参数,匹配路由到 /控制器/id
    action名称中有post的,0参数,匹配路由到post方式的/控制器
    action名称中有post的,1参数,匹配路由到post方式的/控制器/id

    对于返回,可以直接返回一个class,则apicontroller自动根据请求的content-type序列化成xml或者json。具体例子为,用ie打开相应api的url返回的是json,用chrome返回的就是xml。

   现在有这样的场景:希望始终返回json。或者可以在chrome浏览器中预览json(因为结构简单,更轻量,更易观察和调试)。

   解决方法:在WebApiConfig.cs中,Register方法添加如下代码:

   1、实现始终返回json:

            var appXmlType = config.Formatters.XmlFormatter.SupportedMediaTypes.FirstOrDefault(t => t.MediaType == "application/xml");config.Formatters.XmlFormatter.SupportedMediaTypes.Remove(appXmlType);

  也可以这样:

          config.Formatters.XmlFormatter.SupportedMediaTypes.Clear();
  还可以这样:

          config.Formatters.Remove(config.Formatters.XmlFormatter);

   2、实现有url参数控制返回json或者xml:

            config.Formatters.XmlFormatter.MediaTypeMappings.Add(new QueryStringMapping("ct", "xml", "application/xml"));config.Formatters.JsonFormatter.MediaTypeMappings.Add(new QueryStringMapping("ct", "json", "application/json"));
         这样可以通过 /api/xxxx/id?ct=json来返回json格式


另外,在使用razor引擎时,@标志可以很方便的插入代码。

同时,@引入块标志标签时(@{},@if(){},@foreach(){}等),{}内可以自动识别是代码还是html标签。

比如:

@if(Model.status==1){ string url="http://www.xx.com"; }

或者

@if(Model.status==1){ <div>妹啊</div>  }

甚至混合起来

@if(Model.status==1){ 
string url="http://www.xx.com"; 
<div>啊啊啊</div>
}

但是,有些时候,识别并不正确。比如

@if(Model.status==1){ 
妹啊@Url.Action("Index") 
}

这个会报错。解决方法是 使用@:

@if(Model.status==1){ 
@:妹啊@Url.Action("Index") 
}
注意,如果将@:与}放在同一行,依然会报错:

@if(Model.status==1){ 
@:妹啊@Url.Action("Index") }
会报错

另外遇到的(真的是很杂,只是记录下来而已)

利用JQuery来获取partialview,然后显示的问题。

类似于微博的评论展开,点击评论链接按钮,会展开评论列表,再次点击会收起。

因为评论不会预先加载(会有很多条目,每条下都会有评论,类似微博),所以要在点击按钮时才加载,同时,又不希望每次点击都去加载,只在第一次加载。也就说要更改onclick事件,或者动态绑定的click事件。又因为partialview中也有hide操作(针对的是与点击评论按钮相同的元素)所以使用如下技巧

<div><span><a href="javascript:void(0)" οnclick="getComments(this,@item.itemID)">评论</a></span></div>
这里是抽取的部分razor代码
<script type="text/javascript">function getComments(obj, getid) {$commentList=$(obj).parent().parent().next();$.get("@Url.Action("CommentList")/" + getid, {}, function (data) {$commentList.html(data);});$(obj).attr("onclick",null);$(obj).click(function(){if ($commentList.is(":hidden")){$commentList.slideDown();}else{$commentList.slideUp();}});}
</script>
这里jquery不用toggle,而用click在其中判定is(":hidden"),来兼容partialview中调用的slideUp

这篇关于.Net MVC4 使用心得(六)WebApi Json和Xml,razor@{}的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/658639

相关文章

Java中流式并行操作parallelStream的原理和使用方法

《Java中流式并行操作parallelStream的原理和使用方法》本文详细介绍了Java中的并行流(parallelStream)的原理、正确使用方法以及在实际业务中的应用案例,并指出在使用并行流... 目录Java中流式并行操作parallelStream0. 问题的产生1. 什么是parallelS

Linux join命令的使用及说明

《Linuxjoin命令的使用及说明》`join`命令用于在Linux中按字段将两个文件进行连接,类似于SQL的JOIN,它需要两个文件按用于匹配的字段排序,并且第一个文件的换行符必须是LF,`jo... 目录一. 基本语法二. 数据准备三. 指定文件的连接key四.-a输出指定文件的所有行五.-o指定输出

Linux jq命令的使用解读

《Linuxjq命令的使用解读》jq是一个强大的命令行工具,用于处理JSON数据,它可以用来查看、过滤、修改、格式化JSON数据,通过使用各种选项和过滤器,可以实现复杂的JSON处理任务... 目录一. 简介二. 选项2.1.2.2-c2.3-r2.4-R三. 字段提取3.1 普通字段3.2 数组字段四.

Linux kill正在执行的后台任务 kill进程组使用详解

《Linuxkill正在执行的后台任务kill进程组使用详解》文章介绍了两个脚本的功能和区别,以及执行这些脚本时遇到的进程管理问题,通过查看进程树、使用`kill`命令和`lsof`命令,分析了子... 目录零. 用到的命令一. 待执行的脚本二. 执行含子进程的脚本,并kill2.1 进程查看2.2 遇到的

MyBatis常用XML语法详解

《MyBatis常用XML语法详解》文章介绍了MyBatis常用XML语法,包括结果映射、查询语句、插入语句、更新语句、删除语句、动态SQL标签以及ehcache.xml文件的使用,感兴趣的朋友跟随小... 目录1、定义结果映射2、查询语句3、插入语句4、更新语句5、删除语句6、动态 SQL 标签7、ehc

详解SpringBoot+Ehcache使用示例

《详解SpringBoot+Ehcache使用示例》本文介绍了SpringBoot中配置Ehcache、自定义get/set方式,并实际使用缓存的过程,文中通过示例代码介绍的非常详细,对大家的学习或者... 目录摘要概念内存与磁盘持久化存储:配置灵活性:编码示例引入依赖:配置ehcache.XML文件:配置

Java 虚拟线程的创建与使用深度解析

《Java虚拟线程的创建与使用深度解析》虚拟线程是Java19中以预览特性形式引入,Java21起正式发布的轻量级线程,本文给大家介绍Java虚拟线程的创建与使用,感兴趣的朋友一起看看吧... 目录一、虚拟线程简介1.1 什么是虚拟线程?1.2 为什么需要虚拟线程?二、虚拟线程与平台线程对比代码对比示例:三

k8s按需创建PV和使用PVC详解

《k8s按需创建PV和使用PVC详解》Kubernetes中,PV和PVC用于管理持久存储,StorageClass实现动态PV分配,PVC声明存储需求并绑定PV,通过kubectl验证状态,注意回收... 目录1.按需创建 PV(使用 StorageClass)创建 StorageClass2.创建 PV

Redis 基本数据类型和使用详解

《Redis基本数据类型和使用详解》String是Redis最基本的数据类型,一个键对应一个值,它的功能十分强大,可以存储字符串、整数、浮点数等多种数据格式,本文给大家介绍Redis基本数据类型和... 目录一、Redis 入门介绍二、Redis 的五大基本数据类型2.1 String 类型2.2 Hash

Redis中Hash从使用过程到原理说明

《Redis中Hash从使用过程到原理说明》RedisHash结构用于存储字段-值对,适合对象数据,支持HSET、HGET等命令,采用ziplist或hashtable编码,通过渐进式rehash优化... 目录一、开篇:Hash就像超市的货架二、Hash的基本使用1. 常用命令示例2. Java操作示例三