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