[Mono-bugs] [Bug 522540] Web app root operator (~) doesn't work in web.config
bugzilla_noreply at novell.com
bugzilla_noreply at novell.com
Thu Jul 16 05:03:40 EDT 2009
http://bugzilla.novell.com/show_bug.cgi?id=522540
User mhabersack at novell.com added comment
http://bugzilla.novell.com/show_bug.cgi?id=522540#c1
Marek Habersack <mhabersack at novell.com> changed:
What |Removed |Added
----------------------------------------------------------------------------
Status|NEW |CLOSED
Resolution| |INVALID
--- Comment #1 from Marek Habersack <mhabersack at novell.com> 2009-07-16 03:03:39 MDT ---
(In reply to comment #0)
> Using "~" in the web.config file for a connectionString doesn't work with
> either xsp2 or mod_mono using SqliteMembershipProvider and "Forms"
> authentication.
>
> <?xml version="1.0"?>
> <!--
> Web.config file for mycode.
>
> The settings that can be used in this file are documented at
> http://www.mono-project.com/Config_system.web and
> http://msdn2.microsoft.com/en-us/library/b5ysx397.aspx
> -->
> <configuration>
> <connectionStrings>
> <add name="MySqlConnection"
> connectionString="URI=file:~/App_Data/aspnetdb.sqlite"/>
> </connectionStrings>
Actually, I don't think this is a bug. Connection strings are not handled in
any way by System.Web. Their handling belongs in the data provider which, in
turn, _cannot_ depend on System.Web since it may be used outside ASP.NET -
therefore it can't use MapPath to solve ~/path/ into physical path. The issue
you're seeing is that mod_mono is ran within apache and apache's working
directory is not the application's root but, most probably, filesystem root (or
apache's home/docroot directory) so relative paths need to be handled from that
point. You can check what is the working directory by printing it from
somewhere in your application.
Also, System.Web cannot preprocess the connection string since their format and
syntax is provider-specific.
Basically, you have several ways of handling the situation from within your
application:
1. If you access the connectionString from your code-behind like:
WebConfigurationManager.ConnectionStrings ["MySqlConnection"];
Then you can just preprocess the URI part yourself by calling MapPath on the
part which specifies the file before passing the string to Sqlite
2. If you access the connectionString from markup using expressions like:
<tag runat="server" ConnectionString="<%$ ConnectionStrings: MySqlConnection
%>"/>
Then you have two choices:
1. Derive a new expression builder from
System.Web.Compilation.ConnectionStringsExpressionBuilder and override
the GetCodeExpression method so that it calls your version of the static
GetConnectionString method. Your version of that method needs to
preprocess the string by using a MapPath
2. Like above, just write a totally new expression builder
3. Use the |DataDirectory| macro in the connection string in place of ~
This method looks up the AppDomain data item called "DataDirectory" which is
set by hosting environment to the full path of your ~/App_Data/
--
Configure bugmail: http://bugzilla.novell.com/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are the QA contact for the bug.
More information about the mono-bugs
mailing list