如何在C#中创建API来推送或接收数据?

如何在C#中创建API来推送或接收数据?,c#,asp.net,C#,Asp.net,嗨,我想为我的网站创建一个API来发送和接收数据。 例如,我需要我的客户上传产品,单个或多个项目。产品提要可以每天、每周或每月发送 产品名称: 产品颜色: 产品重量: 产品图片: 我还需要将此数据发送到其他服务器的功能。而且它应该是用户友好的 但我不知道从哪里开始,用什么技术使它变得简单和充分 我有Asp.Net,C#的背景。很高兴能看到一个如何实现它的示例。最好使用WEB服务(WCF服务)来轻松实现这一点。通过WCF进行REST将是最好的选择。下面是一个很好的文章系列,介绍如何使用WCF进行R

嗨,我想为我的网站创建一个API来发送和接收数据。 例如,我需要我的客户上传产品,单个或多个项目。产品提要可以每天、每周或每月发送

产品名称: 产品颜色: 产品重量: 产品图片:

我还需要将此数据发送到其他服务器的功能。而且它应该是用户友好的

但我不知道从哪里开始,用什么技术使它变得简单和充分


我有Asp.Net,C#的背景。很高兴能看到一个如何实现它的示例。

最好使用WEB服务(WCF服务)来轻松实现这一点。

通过WCF进行REST将是最好的选择。下面是一个很好的文章系列,介绍如何使用WCF进行REST:

这里有两个不同的功能,请记住它们本质上应该是分开的。它们中的每一个都被定义为“谁与谁整合”

在第一部分中,您希望公开一个web服务API,客户端可以连接到该API并发送/接收数据(后者仅在请求时提供)。您希望如何定义此网站取决于您希望如何将其公开给客户端、客户端希望如何连接等。常见选项有:

  • (经典的ASP.NET web服务)
  • (将其视为更现代的ASP.NET web服务)
您甚至可以通过定义自己的WSDL供客户端使用来公开一个手动服务,或者一个接受并返回JSON的服务,以使客户端对JavaScript更加友好,等等。但以上两个是你最常见的选择

第二部分是要将数据“推送”到另一个服务。这是其他服务需要公开的内容,您需要集成到其中。所以设计应该从那一边开始。如果你负责这个设计,就按照上面的方法处理。在那里公开服务,然后使用公开服务的相同技术在应用程序中使用它们


这里要记住的主要事情是将两者分开,因为试图公开一个同时使用另一个web服务的web服务可能会导致混淆和一些不明显的解决方法。这些是独立的关注点,即使最终用户不知道它们之间的分离程度,也需要在逻辑级别上保持分离。

这里有一个简单的最小WCF服务,它返回JSON格式的产品。要进行尝试,请创建一个.NET4.0完整配置文件控制台应用程序。运行该程序,并将其放入浏览器的地址栏:

Program.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.ServiceModel.Web;
using System.Text;

namespace WCFServiceExample
{

    public class Product
    {
        public string Id { get; set; }
        public string Name { get; set; }

    }

    [ServiceContract(Namespace = "")]
    public interface IProductService
    {
        [WebGet(UriTemplate = "Product/{id}", ResponseFormat = WebMessageFormat.Json)]
        [OperationContract]
        Product Product(string id);

    }
    public class ProductService : IProductService
    {

        public Product Product(string id)
        {
            return new Product { Id = id, Name = "A Sample Product" }; 
        }
    }

    class Program
    {
        private static ServiceHost servHost;
        static void Main(string[] args)
        {
            StartService();
            Console.WriteLine("\n\nPress any key to exit...");
            Console.ReadKey();
        }

        public static void StartService()
        {
            servHost = new ServiceHost(typeof(ProductService));
            servHost.Open();
        }

        ~Program()
        {
            if (servHost != null)
            {
                servHost.Close();
            }
        }
    }
}
App.config

<?xml version="1.0"?>
<configuration>

    <system.serviceModel>
        <diagnostics>
            <messageLogging logEntireMessage="true" logKnownPii="true" logMalformedMessages="true"
                logMessagesAtServiceLevel="true" logMessagesAtTransportLevel="true" />
            <endToEndTracing propagateActivity="true" activityTracing="true"
                messageFlowTracing="true" />
        </diagnostics>
        <services>
            <service name="WCFServiceExample.ProductService">
                <endpoint
                  address="http://localhost:8080/productservice"
                  contract="WCFServiceExample.IProductService"
                  kind="webHttpEndpoint" />
            </service>
        </services>
    </system.serviceModel>
    <startup>
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
    </startup>
</configuration>