使用动态创建的URL发送电子邮件c#

时间:2014-08-19 11:35:41

标签: c# rest http windows-services

我想要完成的任务:

我有一个Windows服务,可以根据某些数据库数据创建电子邮件。 (不是问题)

我希望服务能够创建一次性使用链接,沿http://thisserver:80/someGuid/whicheverURL行 并听取这个网址,直到有人按下链接(我想这可能是某种休息'发布'的事情)

我需要什么:

  • 使用SelfHosted WebApi为此网址创建运行时网址和侦听器有哪些选择
  • 关于如何做到这一点的一些指导(不一定要具体 实例
  • 通过Get
  • 查看访问了哪个“guid”

请记住

我不需要显示任何数据,只需检查用户是否实际点击了链接然后运行了一些内部流程

一如既往地提前谢谢:)

解决方案 我发现是一个合适的解决方案 - >基于明确的答案&基于http://www.asp.net/web-api/overview/hosting-aspnet-web-api/use-owin-to-self-host-web-api

我是自动托管WindowsService(无IIS)中的“网站”

主:

var baseAddress = new Uri("http://localhost:8080/");
        var guidList = new string[]{
           "89ac3d67-81fc-4294-bacc-72a97469cc95",
           "99ac3d67-81fc-4294-bacc-72a97469cc95",
           "09ac3d67-81fc-4294-bacc-72a97469cc95",
        };
        foreach (var guid in guidList)
        {
            Console.WriteLine(guid);
            var config = new HttpSelfHostConfiguration(baseAddress + guid);

            config.Routes.MapHttpRoute("default", "{controller}/{id}", new { controller = new JobController(), id = RouteParameter.Optional });
            var server = new HttpSelfHostServer(config);
            server.OpenAsync().Wait();

        }
        Console.WriteLine("Server is opened");
        Console.ReadKey();

控制器

 public HttpResponseMessage Get()
    {
        var request = ControllerContext.RequestContext.Url.Request.RequestUri;
        Uri UrlGuid = request.RequestUri;
        Console.WriteLine("{0} has been accessed", UrlGuid.Segments[1]);
        return new HttpResponseMessage
        {
            Content = new StringContent("Some Content Here")
        };
    }

1 个答案:

答案 0 :(得分:1)

使用Web API或MVC:

  • 我会在表格中创建一行,其中UNIQUEIDENTIFIER(C#GUID)将用于标识记录。
  • Url可能只是:http://servername:80/controller?id=<the guid>但是使用自定义路由,您可以按照URI中GUID的原始方式创建URI
  • 让控制器接收guid密钥并将记录标记为已消耗。

MVC 5.0中的控制器示例

public class TestController: Controller
{

   public ActionResult ProcessResponse(Guid id)
   {
        //
        //lookup & process the record using the id...
        //
        return View("ThankYou");  // <-- will display the "ThankYou.cshtml" view
   }
}