1

我从 Visual Studio 2012 创建了一个 websharper sitelet 项目,我称之为 SiteletTest。

我编译了这个项目。

然后我将 SiteletTest/Web 复制到 inetpub/wwwroot。

然后我去localhost/SiteletTest,但在每种情况下我都会得到 http 404。localhost/SiteletTest/Homelocalhost/SiteletTest/home

如果我去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>

在我知道这是否可以满足我的需求之前,我不会为许可证付费,那么,我该如何让它发挥作用

我不想复制站点代码,但这里有一些片段:

   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
             ]
4

1 回答 1

2

我很确定你错过了三件事中的一件:

1-您的站点/路由器未定义......像这样:

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 路径。

于 2013-02-20T18:19:30.160 回答