EasyText, EasyLicense 的作者, https://github.com/EasyHelper Good Good Study,Day Day Up.

 

Silverlight_Rest_WCF系列之一:简单的Rest

1:新建WCF服务应用程序,名称为RestWCF,选择在新网站中承载.

2:新建实体类Product,代码如下:

复制代码
[DataContract]
public class Product
{
    [DataMember]
    
public Guid Id { getset; }

    [DataMember]
    
public String Name { getset; }
}
复制代码

3:新建服务契约IProductService:

 

复制代码
[ServiceContract]
    
public interface IProductService
    {
        [OperationContract]
        [WebGet(UriTemplate
="Product")]
        List
<Product> GetProducts();

        [OperationContract]
        [WebInvoke(UriTemplate
="Product",Method="PUT")]
        
bool CreateProduct(Product product);

        [OperationContract]
        [WebInvoke(UriTemplate 
= "Product", Method = "POST")]
        
bool UpdateProduct(Product product);

        [OperationContract]
        [WebInvoke(UriTemplate 
= "Product", Method = "DELETE")]
        
bool DeleteProduct(Product product);
    }
复制代码

注意的是这里都是一些CRUD操作,但是除了OperationContract修饰外,还有WebGet,WebInvoke特性来修饰。

UriTemplate就是Uri模版的意思,如果web地址为http://www.rest.com.那么rest服务的地址就是http://www.rest.com/Product.

OK.上面的契约大致表示

GET-----GetProducts方法。

PUT-----CreateProduct.

POST----UpdateProduct

DELETE---DeleteProduct。

4:新建服务类:ProductService,实现服务接口,代码如下:

复制代码
public class ProductService:IProductService
    {
        
public List<Product> GetProducts()
        {
            
return new List<Product>()
                {
                    
new Product(){ Id=Guid.NewGuid(), Name="111"},
                    
new Product(){ Id=Guid.NewGuid(), Name="222"},
                    
new Product(){ Id=Guid.NewGuid(), Name="333"},
                };
        }

        
public bool CreateProduct(Product product)
        {
            
return true;
        }

        
public bool UpdateProduct(Product product)
        {
            
return true;
        }

        
public bool DeleteProduct(Product product)
        {
            
return true;
        }
    }
复制代码

当然了,实际上肯定是数据库操作,在这里我们就先Mock一下吧。

5:新建ProductService.svc文件,代码如下:

<%@ ServiceHost Language="C#" Debug="true" Service="RestWCF.ProductService"  %>

这里有一点要注意。Service对应的是包含类的全部名称=命名空间+类名.

6:配置web.config文件。

复制代码
<system.serviceModel>
    
<services>
      
<service name="RestWCF.ProductService">
        
<endpoint address="" behaviorConfiguration="RestBehavior" binding="webHttpBinding"
          bindingConfiguration
="" contract="RestWCF.IProductService" />
      
</service>
    
</services>
    
<behaviors>
      
<endpointBehaviors>
        
<behavior name="RestBehavior">
          
<webHttp helpEnabled="true" defaultBodyStyle="Bare" defaultOutgoingResponseFormat="Json" />
        
</behavior>
      
</endpointBehaviors>
      
<serviceBehaviors>
        
<behavior name="">
          
<serviceMetadata httpGetEnabled="true" />
          
<serviceDebug includeExceptionDetailInFaults="false" />
        
</behavior>
      
</serviceBehaviors>
    
</behaviors>
    
<serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
  
</system.serviceModel>
复制代码

在这里因为要配置Rest服务,所以我们添加webHttp Behavior,并且启用helpEnabled.在这里我们设置defaultBodyStyle="Bare"代表不包装。

defaultOutgoingResonseFormat="Json",则代表默认输出的格式是json,如果不设置的话,默认是xml。

7:在浏览器中浏览,因为我们启用了HelpEnabled.所以我们输入的地址是:

8:OK,服务我们已经配置完成了,我们还是测试下吧,打开fiddler.

结果如下:

在这里我们提交下POST请求。

下回我们将使用Silverlight来调用Get,Post,Put,Delete的Rest服务。

oh,我忘记了,这些全部是大写,所以你最好记住GET,POST,PUT,DELETE.

posted @   LoveJenny  阅读(5083)  评论(13编辑  收藏  举报
编辑推荐:
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架
EasyText, EasyLicense 的作者, https://github.com/EasyHelper Good Good Study,Day Day Up.

 

点击右上角即可分享
微信分享提示