Я разрабатываю сервер используя RESTFUL архитектуру на WCF, используя entity framework
Я разрабатываю сервер используя RESTFUL архитектуру на WCF, используя entity framework. Вопрос заключается в следующем - у меня есть БД(MySQL), я ее привязал к своему серверу и все работает добротно, однако стиль restful подразумевает помимо получения доступа к базе данных (GET) еще PUT, POST, DELETE Я был бы вам признателен если кто-нибудь сможет мне помочь или подсказать как правильно создать PUT, POST,DELETE
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.Text;
using MySql.Data;
using WcfRestFullService.Model;
namespace WcfRestFullService
{
// NOTE: You can use the "Rename" command on the "Refactor" menu to change the class name "CustomerSevice" in code, svc and config file together.
// NOTE: In order to launch WCF Test Client for testing this service, please select CustomerSevice.svc or CustomerSevice.svc.cs at the Solution Explorer and start debugging.
public class CustomerSevice : ICustomerSevice
{
MySQLEntities dc;
public CustomerSevice()
{
dc = new MySQLEntities();
}
public List<CustomerDataContract> GetAllCustomer()
{
var query = (from a in dc.customers
select a).Distinct();
List<CustomerDataContract> CustomersList = new List<CustomerDataContract>();
query.ToList().ForEach(x =>
{
CustomersList.Add(new CustomerDataContract
{
Id_Cus = Convert.ToString(x.Id_Cus),
FirstName_Cus = x.FirstName_Cus,
LastName_Cus = x.LastName_Cus,
PhoneNum_Cus = x.PhoneNum_Cus.ToString(),
Email_Cus = x.Email_Cus,
});
});
return CustomersList;
}
public CustomerDataContract CustomerDetails(string Id_Cus)
{
CustomerDataContract Cust = new CustomerDataContract();
try
{
var query = (from a in dc.customers
where a.Id_Cus.Equals(Id_Cus)
select a).Distinct().FirstOrDefault();
Cust.Id_Cus = query.Id_Cus.ToString();
Cust.FirstName_Cus = query.FirstName_Cus;
Cust.LastName_Cus = query.LastName_Cus;
Cust.PhoneNum_Cus = query.PhoneNum_Cus.ToString();
Cust.Email_Cus = query.Email_Cus;
}
catch (Exception ex)
{
throw new FaultException<string>(ex.Message);
}
return Cust;
}
// DELETE
public string DeleteCustomer(string Id_Cus)
{
CustomerDataContract Cust = new CustomerDataContract();
var query = (from n in dc.customers
where n.Id_Cus.Equals(Id_Cus)
select n).First();
Cust.customer.Remove(query);
Cust.SaveChanges();
return query+" was deleted";
}
//Insert/POST
public string InsertCustomer(CustomerDataContract customerDataContract)
{
CustomerDataContract Cust = new CustomerDataContract();
// db_usuarioEntities context = new db_usuarioEntities();
customer cust = new customer();
cust.Id_Cus = customerDataContract.Id_Cus;
cust.FirstName_Cus = customerDataContract.FirstName_Cus;
cust.LastName_Cus = customerDataContract.LastName_Cus;
// cust.fl_ativo = (customerDataContract.RegistroAtivo ? "S" : "N");
cust.PhoneNum_Cus = customerDataContract.PhoneNum_Cus;
cust.Email_Cus = customerDataContract.Email_Cus;
Cust.customer.Add(cust);
Cust.SaveChanges();
//context.tb_usuarios.Add(usuario);
//context.SaveChanges();
return null;
}
public string UpdateCustomer(CustomerDataContract customerDataContract)
{
//using (db_usuarioEntities context = new db_usuarioEntities())
using (CustomerDataContract Cust = new CustomerDataContract();)
{
/*LOCALIZA O USUÁRIO PELO SEU CÓDIGO*/
customer cust = Cust.customer.Where(n => n.Id_Cus == customerDataContract.Id_Cus).First();
cust.Id_Cus = customerDataContract.Id_Cus;
cust.FirstName_Cus = customerDataContract.FirstName_Cus;
cust.LastName_Cus = customerDataContract.LastName_Cus;
//cust.fl_ativo = (usuarioEntity.RegistroAtivo ? "S" : "N");
cust.PhoneNum_Cus = customerDataContract.PhoneNum_Cus;
cust.Email_Cus = customerDataContract.Email_Cus;
//cust.id_usuario = customerDataContract.Codigo.Value;
/*SALVA AS ALTERAÇÕES REALIZADAS*/
Cust.SaveChanges();
return null;
}
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.ServiceModel.Web;
using System.Text;
namespace WcfRestFullService
{
// NOTE: You can use the "Rename" command on the "Refactor" menu to change the interface name "ICustomerSevice" in both code and config file together.
[ServiceContract]
public interface ICustomerSevice
{
[OperationContract]
[WebInvoke(Method = "GET", RequestFormat = WebMessageFormat.Json,
ResponseFormat = WebMessageFormat.Json, UriTemplate = "/GetAllCustomer/")]
List<CustomerDataContract> GetAllCustomer();
[OperationContract]
[WebGet(RequestFormat = WebMessageFormat.Json,
ResponseFormat = WebMessageFormat.Json,
UriTemplate = "/CustomerDetails/{Id_Cus}")]
CustomerDataContract CustomerDetails(String Id_Cus);
[OperationContract]
[WebInvoke(Method = "DELETE", ResponseFormat = WebMessageFormat.Json,
RequestFormat = WebMessageFormat.Json,
//BodyStyle = WebMessageBodyStyle.Bare,
UriTemplate = "/DeleteCustomer/{Id_Cus}")]
String DeleteCustomer(String Id_Cus);
[OperationContract]
[WebInvoke(Method = "POST", ResponseFormat = WebMessageFormat.Json,
RequestFormat = WebMessageFormat.Json,
BodyStyle = WebMessageBodyStyle.Wrapped,
UriTemplate = "/InsertCustomer/")]
String InsertCustomer(CustomerDataContract customerDataContract);
[OperationContract]
[WebInvoke(Method = "PUT",ResponseFormat = WebMessageFormat.Json,
RequestFormat = WebMessageFormat.Json,
BodyStyle = WebMessageBodyStyle.Bare,
UriTemplate = "/UpdateCustomer/")]
String UpdateCustomer(CustomerDataContract customerDataContract);
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.Web;
namespace WcfRestFullService
{
[DataContract]
public class CustomerDataContract
{
[DataMember]
public string Id_Cus { get; set; }
[DataMember]
public string FirstName_Cus { get; set; }
[DataMember]
public string LastName_Cus { get; set; }
[DataMember]
public string PhoneNum_Cus { get; set; }
[DataMember]
public string Email_Cus { get; set; }
}
}