C#学习之路-MVC(二)和WebAPI

本文介绍ASP.NET MVC中的数据验证、HTML辅助方法及Web API的实现方式,包括REST服务对比SOAP服务、自定义HTML辅助方法、Web API控制器的设计与实现、路由配置以及跨域请求的处理。
摘要由CSDN通过智能技术生成
注释和验证:在Model中使用System.ComponentModel.DataAnnotations中包含的特性,为客户端数据制定一些信息,或用来验证数据。
[Required,StringLength(50)] [DisplayName("Price"),DisplayFormat(DataFormatString"{0:C}")] [DataType(DataType.Date)] 等。
使用ModelState.IsValid来验证模型的状态。
Html Helper :@using(Html.BeginForm){@Html.DisplayName("Check this")//返回参数文本;@Html.CheckBox("check1")//生成复选框}
@Html.Display("Name")返回参数 特性:@Html.TextBox("IdName","Value",new {required="required",@class="class1"})
强化类型的HtmlHelper @Html.DisplayNameFor(m=>m.Text);等。
编辑器扩展:Html.EditorFor(m=>m)和Html.EditorForModel();
自定义:@helper DisplayDay(DateTime day){if(day<DateTime.Today){<span>History</span>}@String.Format("{0:d}",day)}
控制器:使用OutputCacheAttribute来定义结果的缓存,使用基类FilterAttribute时只允许在调用动作方法前过滤它们。


public static class MyHtmlHelper
    {
        /// <summary>
        /// 自定义一个@html.Image()
        /// </summary>
        /// <param name="helper"></param>
        /// <param name="src">src属性</param>
        /// <param name="alt">alt属性</param>
        /// <returns></returns>
        public static MvcHtmlString Image(this HtmlHelper helper, string src, string alt)
        {
            var builder = new TagBuilder("img");
            builder.MergeAttribute("src", src);
            builder.MergeAttribute("alt", alt);
            builder.ToString(TagRenderMode.SelfClosing);
            return MvcHtmlString.Create(builder.ToString());
        }

    }

REST服务和SOAP服务都利用可客户端-服务器技术,SOAP服务可以使有状态的,也可以是无状态的;REST服务是无状态的。SOAP定义了他自己的消息格式,改格式有标题和正文,可以选择服务方法。
声明控制器返回IHttpActionRequest可以实现返回这个接口的任意对象。-低版本的vs需要在Nuget包里面加载Install-Package Microsoft.AspNet.WebApi
 public IHttpActionResult Get()
        {
            return Ok();
        }
使用HtttpClient发送请求
var client = new HttpClient();
            client.BaseAddress = new Uri("接口地址-http://localhost:8081");
            string response = await client.GetStringAsync("接口方法地址-api/MyApi");
或者 var response = client.GetAsync("");
var myclass=await response.Content.ReadAsAsync<T>();
WebAPI路由的自定义在App_Start/WebApiConfig.cs中
给操作添加HTTP方法:1、在方法的上面添加[HttpGet]等特性,表示它映射到Http Get请求。
2、使用AcceptVerb特性 这个特性允许将多个http方法付给一个动作方法,假定有一个与动作方法不同的Url链接,就可以使用ActionName特性。
 [AcceptVerbs(HttpVerbs.Get | HttpVerbs.Post)]        [ActionName("GetPutAction")]
3、基于约定的路由的优点,他在一个地方定义(调用MapHttpRoute方法),不需要用控制器制定任何映射在方法名前添加特性 [Route("book/{bookId}")]意味请求地址必须是/book/2;。
基于特性的路由需要用注册路由调用MapHttpAttributeRoutes方法(在App_Start/WebApiConfig.cs中)。
控制器的所有动作方法常常使用相同的路由前缀。这种前缀可以使用RoutePrefix特性赋予控制。

跨域请求

在 web.config==>System.webService中添加
<httpProtocol> <customHeaders> <add name= "Access-Control-Allow-Origin" value= "*" /> <add name= "Access-Control-Allow-Headers" value= "*" /> <add name= "Access-Control-Allow-Methods" value= "GET, POST, PUT, DELETE" /> </customHeaders> </httpProtocol>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值