我是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控制器了。但是我在浏览器中得到以下输出:
我正在使用我从互联网上下载的示例项目作为骨架框架,因为它包含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?)
作为参考,这是我用来帮助这部分项目的文章:
我很感谢帮助(这与OpenGl和DirectX非常不同)
答案 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
对象和东西进行调整..