AWS S3需要为GET-via wcf生成预签名url,以返回到经典asp请求表单

AWS S3需要为GET-via wcf生成预签名url,以返回到经典asp请求表单,wcf,amazon-web-services,Wcf,Amazon Web Services,我需要创建一个WCF web服务,该服务接收来自经典ASP页面/表单的请求,并在AWS S3中返回一个预签名的过期URL。我有一点WCF的经验。我以前能够返回自定义JSON格式的对象 现在,我需要发布一个表单,从表单中获取请求的文件名,并生成一个24小时后过期的预签名URL,然后返回它。 仅供参考,我的理论做得不好。我需要代码示例 我如何按摩以下做我需要它吗 这似乎接近我所需要的。我可以自己从VB转换到C,我只需要比这段代码更多的内容来理解整个流程 ==samplerstservice.svc

我需要创建一个WCF web服务,该服务接收来自经典ASP页面/表单的请求,并在AWS S3中返回一个预签名的过期URL。我有一点WCF的经验。我以前能够返回自定义JSON格式的对象

现在,我需要发布一个表单,从表单中获取请求的文件名,并生成一个24小时后过期的预签名URL,然后返回它。 仅供参考,我的理论做得不好。我需要代码示例

我如何按摩以下做我需要它吗

这似乎接近我所需要的。我可以自己从VB转换到C,我只需要比这段代码更多的内容来理解整个流程

==samplerstservice.svc.cs===

using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.Text;
using System.Data.SqlClient;
using System.Configuration;

namespace WcfService5
{       
    [ServiceBehavior(InstanceContextMode = InstanceContextMode.Single)]
    public class SampleRestService : ISampleRestService
    {       
        public IEnumerable<APIContentObject> GetAllUsers()
        {
            IList<APIContentObject> myAPIContentObject = new List<APIContentObject>();

            string strcon = ConfigurationManager.ConnectionStrings["iOSConn"].ConnectionString;

            using (SqlConnection conn = new SqlConnection(strcon))
            {
                conn.Open();
                string cmdStr = String.Format("SELECT  FirstName, LastName, Email, pword, SignUpDate, enabled FROM Users");
                SqlCommand cmd = new SqlCommand(cmdStr, conn);
                SqlDataReader rd = cmd.ExecuteReader();

                if (rd.HasRows)
                {
                    while (rd.Read())
                    {
                        myAPIContentObject.Add(new APIContentObject(rd["FirstName"].ToString(),
                                                                    rd["LastName"].ToString(),
                                                                    rd["Email"].ToString(),
                                                                    rd["pword"].ToString(),
                                                                    rd["SignUpDate"].ToString(),
                                                                    rd["enabled"].ToString(),
                                                                    rd["FirstName"].ToString()));                                                                         
                    }
                }
                conn.Close();
            }
            return myAPIContentObject;
        }    
    }

    [DataContract]
    public class APIContentObject
    {
        [DataMember]
        public string Name { get; set; }
        [DataMember]
        public string Excerpt { get; set; }
        [DataMember]
        public string Content { get; set; }
        [DataMember]
        public string ImageURL { get; set; }
        [DataMember]
        public string ThumbnailURL { get; set; }
        [DataMember]
        public string SluggedURL { get; set; }
        [DataMember]
        public string FileURL { get; set; }

        public APIContentObject(string vName, string vExcerpt, string vContent, string vImageURL, string vThumbnailURL, string vSluggedURL, string vFileURL)  //, decimal sal)
        {
            Name = vName;
            Excerpt = vExcerpt;
            Content = vContent;
            ImageURL = vImageURL;
            ThumbnailURL = vThumbnailURL;
            SluggedURL = vSluggedURL;
            FileURL = vFileURL;
        }

    }   
}
==iSampleRestService.cs====

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

namespace WcfService5
{   
    [ServiceContract]
    public interface ISampleRestService
    {
        [OperationContract]
        //attribute for returning JSON format
        [WebGet(ResponseFormat = WebMessageFormat.Json,
            RequestFormat = WebMessageFormat.Xml,
            BodyStyle = WebMessageBodyStyle.Bare,
            UriTemplate = "/json/users")]
        //method
        IEnumerable<APIContentObject> GetAllUsers();              
    }
}
==web.config====

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

  <connectionStrings>
    <add name="iOSConn" connectionString=" Server=HIDDEN;Database=HIDDEN;User ID=HIDDEN;Password=HIDDEN;Trusted_Connection=False;"/>
  </connectionStrings >

  <system.web>
    <compilation debug="true" targetFramework="4.0" />
  </system.web>
  <system.serviceModel>

    <services>
      <service name="WcfService5.SampleRestService">
        <endpoint address="/" behaviorConfiguration="REST" binding="webHttpBinding"
          bindingConfiguration="" contract="WcfService5.ISampleRestService" />
        <endpoint address="mex" binding="mexHttpBinding" bindingConfiguration=""
          contract="IMetadataExchange" />
      </service>
    </services>

    <behaviors>
      <endpointBehaviors>
        <behavior name="REST">
          <webHttp helpEnabled="true" defaultOutgoingResponseFormat="Json" />
        </behavior>
      </endpointBehaviors>
      <serviceBehaviors>
        <behavior name="">
          <serviceMetadata httpGetEnabled="true" />
          <serviceDebug includeExceptionDetailInFaults="false" />
        </behavior>
      </serviceBehaviors>
    </behaviors>

    <serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
  </system.serviceModel>

  <system.webServer>
    <modules runAllManagedModulesForAllRequests="true"/>
  </system.webServer>

</configuration>

好的,通过一些其他的例子,我找到了我需要的。 以下是如何在Amazon S3中创建预签名URL:

 public string AWSS2CreatePreSignedURL(string fileName)
        {
            string urlToReturn = "";
            string jsonClient = "";

            string AWSKey = "YOURKEY";
            string AWSSecretKey = "YOURSECRETKEY";

            using (AmazonS3 client = Amazon.AWSClientFactory.CreateAmazonS3Client(AWSKey, AWSSecretKey))
            {
                dynamic req = new Amazon.S3.Model.GetPreSignedUrlRequest
                {
                    BucketName = "gametrainingresources",
                    Key = fileName,
                    Protocol = Amazon.S3.Model.Protocol.HTTPS,
                    Verb = Amazon.S3.Model.HttpVerb.GET,
                    Expires = DateTime.Now.AddMinutes(20)
                    //Expires = DateTime.Now.AddDays(1).AddSeconds(0)
                };

                //url
                urlToReturn = client.GetPreSignedURL(req);

            }

            return urlToReturn;
        }