Win8 ASP.net HttpRouteUrl

时间:2012-09-26 10:13:25

标签: asp.net-mvc windows winapi

我是Win8和ASP.net开发的新手,我为任何缺乏清晰度或规范而道歉,因为我是一名3D图形程序员,并且正在开发一个ASP.net后端系统。目标是与目标Win8应用程序通信,以使用用户(管理员)通过ASP.net网站输入的数据。

我遇到了多个障碍和死胡同,因为它是新的Win8技术和很少的声音参考资料。

在HomeController.cs中,我试图调用:

 public ActionResult Admin()
    {

        string apiUri = Url.HttpRouteUrl("DefaultApi", new { controller = "testModel", });
        ViewBag.ApiUrl = new Uri(Request.Url, apiUri).AbsoluteUri.ToString();

        return View();
    }

这样我就可以启用路由到我的Admin控制器了。但是我在浏览器中得到以下输出:

http://i.imgur.com/WX34S.png

我正在使用我从互联网上下载的示例项目作为骨架框架,因为它包含WebApiConfig.cs文件,而生成新的VS2012 ASP.NET MVC Web应用程序项目不包含此文件,我相信我需要它因为我能够指定我想要序列化为JSON并删除XML格式。

我已经清除了bin中的.DLL文件并清理了obj文件夹,以防它引用了一个不再存在的对象。

我创建了其他几个项目,一个使用从向导生成的VS2012 MVC Web应用程序项目,它实现了:

 Url.RouteUrl

而不是

 Url.HttpRouteUrl

但我确信这不会达到同样的效果,因为我想通过互联网将http从服务器传送到目标应用程序。如果我尝试使用后者,则会出错:

   'System.Web.Mvc.UrlHelper' does not contain a definition for 'HttpRouteUrl' and no extension method 'HttpRouteUrl' accepting a first argument of type 'System.Web.Mvc.UrlHelper' could be found (are you missing a using directive or an assembly reference?)

作为参考,这是我用来帮助这部分项目的文章:

http://www.asp.net/web-api/overview/creating-web-apis/using-web-api-with-entity-framework/using-web-api-with-entity-framework,-part-4

我很感谢帮助(这与OpenGl和DirectX非常不同)

1 个答案:

答案 0 :(得分:3)

由于这是标准的MVC控制器操作,而不是ApiController操作,因此该控制器内的Url属性只是标准的UrlHelper

您可以使用以下内容:

public ActionResult Admin()
{
    string apiUri = Url.RouteUrl(
        "DefaultApi", 
        new { httproute = "", controller = "Values" }, 
        Request.Url.Scheme
    );
    ViewBag.ApiUrl = apiUri;
    return View();
}

注意routeValues参数中使用的httproute = ""以及指定protocol参数如何生成绝对URL,以便您不需要通过创建新的Uri对象和东西进行调整..