我从Visual Studio 2012创建了一个websharper sitelet项目,我称之为SiteletTest。
我编译了这个项目。
然后我将SiteletTest / Web复制到inetpub / wwwroot。
然后我转到localhost/SiteletTest
,localhost/SiteletTest/Home
和localhost/SiteletTest/home
,但在每种情况下我都会获得http 404。
如果我转到localhost/Main.html
然后我会得到一个页面,所以转到此目录似乎有效,但是websharper似乎没有工作。
我的web.config在下面,我不知道还能做什么。我已经将应用程序池设置为使用.net 4:
<configuration>
<system.web>
<compilation debug="true" targetFramework="4.5" />
<authentication mode="Forms" />
<pages>
<controls>
<add tagPrefix="WebSharper" namespace="IntelliFactory.WebSharper.Web" assembly="IntelliFactory.WebSharper.Web" />
<add tagPrefix="ws" namespace="Website" assembly="Website" />
</controls>
</pages>
<httpModules>
<add name="WebSharper.Remoting" type="IntelliFactory.WebSharper.Web.RpcModule, IntelliFactory.WebSharper.Web" />
<add name="WebSharper.Sitelets" type="IntelliFactory.WebSharper.Sitelets.HttpModule, IntelliFactory.WebSharper.Sitelets" />
</httpModules>
</system.web>
<system.webServer>
<validation validateIntegratedModeConfiguration="false" />
<modules>
<add name="WebSharper.Remoting" type="IntelliFactory.WebSharper.Web.RpcModule, IntelliFactory.WebSharper.Web" />
<add name="WebSharper.Sitelets" type="IntelliFactory.WebSharper.Sitelets.HttpModule, IntelliFactory.WebSharper.Sitelets" />
</modules>
</system.webServer>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" />
<bindingRedirect oldVersion="1.0.0.0-2.0.0.0" newVersion="3.0.0.0" />
</dependentAssembly>
</assemblyBinding>
<assemblyBinding appliesTo="v4.0.30319" xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="FSharp.Core" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="2.0.0.0" newVersion="4.3.0.0" />
</dependentAssembly>
</assemblyBinding>
</runtime>
</configuration>
在我知道这是否符合我的需求之前,我不打算购买许可证,所以,如何让这个工作?
我不想复制sitelet代码,但这里有一些片段:
type Action =
| Home
| Contact
| Protected
| Login of option<Action>
| Logout
| Echo of string
和另一个片段:
module Pages =
/// The home page.
let HomePage : Content<Action> =
Skin.WithTemplate "Home" <| fun ctx ->
[
H1 [Text "Welcome to our site!"]
"Let us know how we can contact you" => ctx.Link Action.Contact
]
答案 0 :(得分:2)
我很确定你错过了三件事中的一件:
1-您的sitelet /路由器未定义......类似这样:
type Site() =
interface IWebsite<Action> with
member x.Sitelet =
Sitelet.Infer
<| function
| Home -> Pages.HomePage
...
member x.Actions = []
这会将每个操作案例映射到正确的页面。有很多方法可以定义它,但上面的Sitelet.Infer只是按名称映射路径。
2-您没有指定网站装配属性......如下所示:
[<assembly : Website(typeof<Site>)>]
do ()
我认为这告诉ASP.NET将上述Sitelet加载为您的站点。
3-第三个选项是从C#Web项目的Default.aspx页面自动加载客户端JavaScript控件。如果您使用Web应用程序(ASP.NET)模板,您将看到一个示例......但是我认为您不能以完全REST的方式控制URL路径。