我的合同定义如下:
[OperationContract]
[WebGet(UriTemplate = "/GetX?myStr={myStr}&myX={myX}", BodyStyle = WebMessageBodyStyle.Wrapped)]
string GetX(string myStr, int? myX);
Run Code Online (Sandbox Code Playgroud)
我得到一个例外:[InvalidOperationException:合同'IMyGet'中的'GetX'操作有一个名为'myX'的类型为'System.Nullable 1[System.Int32]', but type 'System.Nullable1 [System.Int32]' 的查询变量'不能被'QueryStringConverter'转换.UriTemplate查询值的变量必须具有可由"QueryStringConverter"转换的类型.
找不到任何有关此错误的信息,除了以下链接:http: //blog.rolpdog.com/2007/07/webget-and-webinvoke-rock.html这有点旧,而不是解决方案.
任何想法除了摆脱可以为空的参数做什么?
谢谢.
我的问题如下:我有一个名为ApplicationController的基本控制器(ASP.Net MVC控制器),我希望我的所有控制器都从它继承.此基本控制器具有ILogger属性,标记为[Dependency]属性.(是的,我知道我应该使用构造函数注入,我只是对这个属性感到好奇).
我创建了容器,注册类型,更改了默认工厂,一切都很好.问题是当我尝试在派生控制器中使用我的Logger属性时,它没有得到解决.
我究竟做错了什么?为什么容器在创建派生控制器时不解析基类依赖项?
代码示例:
ApplicationController中:
public class ApplicationController : Controller
{
[Dependency]
protected ILogger _logger { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
派生控制器:
public class HomeController : ApplicationController
{
public HomeController()
{
}
public ActionResult Index()
{
_logger.Log("Home controller constructor started.");
ViewData["Message"] = "Welcome to ASP.NET MVC!";
return View();
}
public ActionResult About()
{
return View();
}
}
Run Code Online (Sandbox Code Playgroud)
Unity控制器工厂:
public class UnityControllerFactory : DefaultControllerFactory
{
private readonly IUnityContainer _container;
public UnityControllerFactory(IUnityContainer container)
{
_container = container;
}
protected override IController GetControllerInstance(Type …Run Code Online (Sandbox Code Playgroud) 我正在尝试在VS 2012上使用带有MVC应用程序的url重写模块.我已经使用web平台4.0安装了模块,遵循Ruslan的博客文章,根据评论更新了他的js脚本(特别是Brant Burnett的最后一个) 10月19日,脚本执行成功.我检查了DotNetConfig.xsd,一切看起来都很好.
如果我打开IIS管理控制台,我会看到Url Rewrite模块,一切正常.
我创建一个简单的MVC解决方案(使用默认的主/帐户控制),当我添加了简单的ToLowerCase规则(也鲁斯兰的博客复制),我得到的标签和HTTP 500.19下的蓝色波浪线,如果我尝试执行.重启等等没有帮助.另外重要提一下我使用的是IIS Express 7.5.
在运行VS 2010的机器上,同样的程序对我很有用,url重写工作没有问题.
谁知道什么可能出错?进一步分析需要哪些信息?为什么intellisense工作和重写模块不被认可?